Skip to content

Commit 1a50b78

Browse files
committed
release: 0.1.7 - Check for early testing version and reset permissions
1 parent 63bb1b9 commit 1a50b78

File tree

6 files changed

+83
-7
lines changed

6 files changed

+83
-7
lines changed

apps/desktop/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "desktop",
33
"private": true,
4-
"version": "0.1.6",
4+
"version": "0.1.7",
55
"scripts": {
66
"dev": "tauri dev",
77
"build": "tsc && next build",

apps/desktop/src-tauri/src/main.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,27 @@ fn main() {
115115
.expect("failed to reset screen permissions");
116116
}
117117

118+
#[tauri::command]
119+
fn reset_microphone_permissions() {
120+
#[cfg(target_os = "macos")]
121+
std::process::Command::new("tccutil")
122+
.arg("reset")
123+
.arg("Microphone")
124+
.arg("so.cap.desktop")
125+
.spawn()
126+
.expect("failed to reset microphone permissions");
127+
}
128+
129+
fn reset_camera_permissions() {
130+
#[cfg(target_os = "macos")]
131+
std::process::Command::new("tccutil")
132+
.arg("reset")
133+
.arg("Camera")
134+
.arg("so.cap.desktop")
135+
.spawn()
136+
.expect("failed to reset camera permissions");
137+
}
138+
118139
let _guard = sentry::init(("https://efd3156d9c0a8a49bee3ee675bec80d8@o4506859771527168.ingest.us.sentry.io/4506859844403200", sentry::ClientOptions {
119140
release: sentry::release_name!(),
120141
..Default::default()

apps/desktop/src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
},
99
"package": {
1010
"productName": "Cap",
11-
"version": "0.1.6"
11+
"version": "0.1.7"
1212
},
1313
"tauri": {
1414
"allowlist": {

apps/desktop/src/app/page.tsx

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,35 @@ export default function CameraPage() {
1919
const [permissions, setPermissions] = useState(getPermissions());
2020
const [permissionsLoaded, setPermissionsLoaded] = useState(false);
2121

22+
useEffect(() => {
23+
const checkVersion = async () => {
24+
const storedVersion = localStorage.getItem("cap_test_build_version");
25+
const appVersion = await getVersion();
26+
27+
if (!storedVersion) {
28+
console.log("No version stored");
29+
localStorage.setItem("cap_test_build_version", appVersion);
30+
31+
if (localStorage.getItem("permissions")) {
32+
await invoke("reset_screen_permissions");
33+
await invoke("reset_camera_permissions");
34+
await invoke("reset_microphone_permissions");
35+
const permissions = JSON.parse(
36+
localStorage.getItem("permissions") || "{}"
37+
);
38+
permissions.screen = false;
39+
permissions.camera = false;
40+
permissions.microphone = false;
41+
permissions.confirmed = false;
42+
localStorage.setItem("permissions", JSON.stringify(permissions));
43+
toast.error("Early version detected - permissions have been reset.");
44+
}
45+
}
46+
};
47+
48+
checkVersion();
49+
}, []);
50+
2251
useEffect(() => {
2352
const checkPermissions = setInterval(() => {
2453
const updatedPermissions = getPermissions();

apps/desktop/src/components/windows/Permissions.tsx

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ export const Permissions = () => {
1818

1919
const checkScreenCapture = async () => {
2020
const hasAccess = await invoke("has_screen_capture_access");
21-
console.log("hasAccess", hasAccess);
2221
if (hasAccess) {
2322
await savePermissions("screen", true);
2423
setPermissions((prev) => ({
@@ -31,15 +30,28 @@ export const Permissions = () => {
3130
const checkCameraAccess = async () => {
3231
try {
3332
const stream = await navigator.mediaDevices.getUserMedia({ video: true });
34-
// Assuming access is granted if the above line doesn't throw an error
3533
await savePermissions("camera", true);
3634
setPermissions((prev) => ({
3735
...prev,
3836
camera: true,
3937
}));
40-
// Stop using the camera after checking access
4138
stream.getTracks().forEach((track) => track.stop());
4239
} catch (error) {
40+
navigator.permissions
41+
.query({ name: "camera" as PermissionName })
42+
.then((permissionStatus) => {
43+
if (permissionStatus.state === "denied") {
44+
console.log("Camera access denied");
45+
} else {
46+
permissionStatus.onchange = () => {
47+
if (permissionStatus.state === "denied") {
48+
console.log("Camera access denied");
49+
} else {
50+
checkCameraAccess();
51+
}
52+
};
53+
}
54+
});
4355
console.log("Camera access denied");
4456
}
4557
};
@@ -53,9 +65,23 @@ export const Permissions = () => {
5365
...prev,
5466
microphone: true,
5567
}));
56-
// Stop using the microphone after checking access
5768
stream.getTracks().forEach((track) => track.stop());
5869
} catch (error) {
70+
navigator.permissions
71+
.query({ name: "microphone" as PermissionName })
72+
.then((permissionStatus) => {
73+
if (permissionStatus.state === "denied") {
74+
console.log("Microphone access denied");
75+
} else {
76+
permissionStatus.onchange = () => {
77+
if (permissionStatus.state === "denied") {
78+
console.log("Microphone access denied");
79+
} else {
80+
checkMicrophoneAccess();
81+
}
82+
};
83+
}
84+
});
5985
console.log("Microphone access denied");
6086
}
6187
};

apps/web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "web",
3-
"version": "0.1.6",
3+
"version": "0.1.7",
44
"private": true,
55
"scripts": {
66
"dev": "next dev",

0 commit comments

Comments
 (0)