Skip to content

Commit af7e944

Browse files
chore(permissions): update codegen, default.toml, and desktop app usage
- Regenerate TypeScript bindings with new unified API - Update default.toml with new permission commands - Regenerate autogenerated command files - Update apps/desktop to use new permission API: - use-permissions.ts: use checkPermission/requestPermission/openPermission - apple.tsx: use new API for calendar and contacts permissions Co-Authored-By: yujonglee <[email protected]>
1 parent 4593994 commit af7e944

22 files changed

+126
-623
lines changed

apps/desktop/src/components/settings/calendar/configure/apple.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,16 +133,16 @@ export function AppleCalendarProviderCard() {
133133

134134
const calendar = useAccessPermission({
135135
queryKey: "appleCalendarAccess",
136-
checkPermission: permissionsCommands.checkCalendarPermission,
137-
requestPermission: permissionsCommands.requestCalendarPermission,
138-
openSettings: permissionsCommands.openCalendarSettings,
136+
checkPermission: () => permissionsCommands.checkPermission("calendar"),
137+
requestPermission: () => permissionsCommands.requestPermission("calendar"),
138+
openSettings: () => permissionsCommands.openPermission("calendar"),
139139
});
140140

141141
const contacts = useAccessPermission({
142142
queryKey: "appleContactsAccess",
143-
checkPermission: permissionsCommands.checkContactsPermission,
144-
requestPermission: permissionsCommands.requestContactsPermission,
145-
openSettings: permissionsCommands.openContactsSettings,
143+
checkPermission: () => permissionsCommands.checkPermission("contacts"),
144+
requestPermission: () => permissionsCommands.requestPermission("contacts"),
145+
openSettings: () => permissionsCommands.openPermission("contacts"),
146146
});
147147

148148
return (

apps/desktop/src/hooks/use-permissions.ts

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { useMutation, useQuery } from "@tanstack/react-query";
22
import { message } from "@tauri-apps/plugin-dialog";
3-
import { Command } from "@tauri-apps/plugin-shell";
43

54
import { commands as permissionsCommands } from "@hypr/plugin-permissions";
65

@@ -9,7 +8,7 @@ import { relaunch } from "../store/tinybase/save";
98
export function usePermissions() {
109
const micPermissionStatus = useQuery({
1110
queryKey: ["micPermission"],
12-
queryFn: () => permissionsCommands.checkMicrophonePermission(),
11+
queryFn: () => permissionsCommands.checkPermission("microphone"),
1312
refetchInterval: 1000,
1413
select: (result) => {
1514
if (result.status === "error") {
@@ -21,7 +20,7 @@ export function usePermissions() {
2120

2221
const systemAudioPermissionStatus = useQuery({
2322
queryKey: ["systemAudioPermission"],
24-
queryFn: () => permissionsCommands.checkSystemAudioPermission(),
23+
queryFn: () => permissionsCommands.checkPermission("systemAudio"),
2524
refetchInterval: 1000,
2625
select: (result) => {
2726
if (result.status === "error") {
@@ -33,7 +32,7 @@ export function usePermissions() {
3332

3433
const accessibilityPermissionStatus = useQuery({
3534
queryKey: ["accessibilityPermission"],
36-
queryFn: () => permissionsCommands.checkAccessibilityPermission(),
35+
queryFn: () => permissionsCommands.checkPermission("accessibility"),
3736
refetchInterval: 1000,
3837
select: (result) => {
3938
if (result.status === "error") {
@@ -44,7 +43,7 @@ export function usePermissions() {
4443
});
4544

4645
const micPermission = useMutation({
47-
mutationFn: () => permissionsCommands.requestMicrophonePermission(),
46+
mutationFn: () => permissionsCommands.requestPermission("microphone"),
4847
onSuccess: () => {
4948
setTimeout(() => {
5049
void micPermissionStatus.refetch();
@@ -56,7 +55,7 @@ export function usePermissions() {
5655
});
5756

5857
const systemAudioPermission = useMutation({
59-
mutationFn: () => permissionsCommands.requestSystemAudioPermission(),
58+
mutationFn: () => permissionsCommands.requestPermission("systemAudio"),
6059
onSuccess: () => {
6160
void message("The app will now restart to apply the changes", {
6261
kind: "info",
@@ -68,7 +67,7 @@ export function usePermissions() {
6867
});
6968

7069
const accessibilityPermission = useMutation({
71-
mutationFn: () => permissionsCommands.requestAccessibilityPermission(),
70+
mutationFn: () => permissionsCommands.requestPermission("accessibility"),
7271
onSuccess: () => {
7372
setTimeout(() => {
7473
void accessibilityPermissionStatus.refetch();
@@ -78,24 +77,15 @@ export function usePermissions() {
7877
});
7978

8079
const openMicrophoneSettings = async () => {
81-
await Command.create("exec-sh", [
82-
"-c",
83-
"open 'x-apple.systempreferences:com.apple.preference.security?Privacy_Microphone'",
84-
]).execute();
80+
await permissionsCommands.openPermission("microphone");
8581
};
8682

8783
const openSystemAudioSettings = async () => {
88-
await Command.create("exec-sh", [
89-
"-c",
90-
"open 'x-apple.systempreferences:com.apple.preference.security?Privacy_AudioCapture'",
91-
]).execute();
84+
await permissionsCommands.openPermission("systemAudio");
9285
};
9386

9487
const openAccessibilitySettings = async () => {
95-
await Command.create("exec-sh", [
96-
"-c",
97-
"open 'x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility'",
98-
]).execute();
88+
await permissionsCommands.openPermission("accessibility");
9989
};
10090

10191
const handleMicPermissionAction = async () => {

plugins/permissions/js/bindings.gen.ts

Lines changed: 9 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -6,97 +6,33 @@
66

77

88
export const commands = {
9-
async checkMicrophonePermission() : Promise<Result<PermissionStatus, string>> {
9+
async openPermission(permission: Permission) : Promise<Result<null, string>> {
1010
try {
11-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_microphone_permission") };
11+
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|open_permission", { permission }) };
1212
} catch (e) {
1313
if(e instanceof Error) throw e;
1414
else return { status: "error", error: e as any };
1515
}
1616
},
17-
async requestMicrophonePermission() : Promise<Result<null, string>> {
17+
async checkPermission(permission: Permission) : Promise<Result<PermissionStatus, string>> {
1818
try {
19-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_microphone_permission") };
19+
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_permission", { permission }) };
2020
} catch (e) {
2121
if(e instanceof Error) throw e;
2222
else return { status: "error", error: e as any };
2323
}
2424
},
25-
async checkSystemAudioPermission() : Promise<Result<PermissionStatus, string>> {
25+
async requestPermission(permission: Permission) : Promise<Result<null, string>> {
2626
try {
27-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_system_audio_permission") };
27+
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_permission", { permission }) };
2828
} catch (e) {
2929
if(e instanceof Error) throw e;
3030
else return { status: "error", error: e as any };
3131
}
3232
},
33-
async requestSystemAudioPermission() : Promise<Result<null, string>> {
33+
async resetPermission(permission: Permission) : Promise<Result<null, string>> {
3434
try {
35-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_system_audio_permission") };
36-
} catch (e) {
37-
if(e instanceof Error) throw e;
38-
else return { status: "error", error: e as any };
39-
}
40-
},
41-
async checkAccessibilityPermission() : Promise<Result<PermissionStatus, string>> {
42-
try {
43-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_accessibility_permission") };
44-
} catch (e) {
45-
if(e instanceof Error) throw e;
46-
else return { status: "error", error: e as any };
47-
}
48-
},
49-
async requestAccessibilityPermission() : Promise<Result<null, string>> {
50-
try {
51-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_accessibility_permission") };
52-
} catch (e) {
53-
if(e instanceof Error) throw e;
54-
else return { status: "error", error: e as any };
55-
}
56-
},
57-
async checkCalendarPermission() : Promise<Result<PermissionStatus, string>> {
58-
try {
59-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_calendar_permission") };
60-
} catch (e) {
61-
if(e instanceof Error) throw e;
62-
else return { status: "error", error: e as any };
63-
}
64-
},
65-
async requestCalendarPermission() : Promise<Result<null, string>> {
66-
try {
67-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_calendar_permission") };
68-
} catch (e) {
69-
if(e instanceof Error) throw e;
70-
else return { status: "error", error: e as any };
71-
}
72-
},
73-
async checkContactsPermission() : Promise<Result<PermissionStatus, string>> {
74-
try {
75-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|check_contacts_permission") };
76-
} catch (e) {
77-
if(e instanceof Error) throw e;
78-
else return { status: "error", error: e as any };
79-
}
80-
},
81-
async requestContactsPermission() : Promise<Result<null, string>> {
82-
try {
83-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|request_contacts_permission") };
84-
} catch (e) {
85-
if(e instanceof Error) throw e;
86-
else return { status: "error", error: e as any };
87-
}
88-
},
89-
async openCalendarSettings() : Promise<Result<null, string>> {
90-
try {
91-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|open_calendar_settings") };
92-
} catch (e) {
93-
if(e instanceof Error) throw e;
94-
else return { status: "error", error: e as any };
95-
}
96-
},
97-
async openContactsSettings() : Promise<Result<null, string>> {
98-
try {
99-
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|open_contacts_settings") };
35+
return { status: "ok", data: await TAURI_INVOKE("plugin:permissions|reset_permission", { permission }) };
10036
} catch (e) {
10137
if(e instanceof Error) throw e;
10238
else return { status: "error", error: e as any };
@@ -114,6 +50,7 @@ async openContactsSettings() : Promise<Result<null, string>> {
11450

11551
/** user-defined types **/
11652

53+
export type Permission = "calendar" | "contacts" | "microphone" | "systemAudio" | "accessibility"
11754
export type PermissionStatus = "neverRequested" | "denied" | "authorized"
11855

11956
/** tauri-specta globals **/

plugins/permissions/permissions/autogenerated/commands/check_accessibility_permission.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

plugins/permissions/permissions/autogenerated/commands/check_calendar_permission.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

plugins/permissions/permissions/autogenerated/commands/check_contacts_permission.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

plugins/permissions/permissions/autogenerated/commands/check_microphone_permission.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Automatically generated - DO NOT EDIT!
2+
3+
"$schema" = "../../schemas/schema.json"
4+
5+
[[permission]]
6+
identifier = "allow-check-permission"
7+
description = "Enables the check_permission command without any pre-configured scope."
8+
commands.allow = ["check_permission"]
9+
10+
[[permission]]
11+
identifier = "deny-check-permission"
12+
description = "Denies the check_permission command without any pre-configured scope."
13+
commands.deny = ["check_permission"]

plugins/permissions/permissions/autogenerated/commands/check_system_audio_permission.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

plugins/permissions/permissions/autogenerated/commands/open_calendar_settings.toml

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)