/claim #1540
This PR adds deeplink support for pause/resume recording and device switching, plus a Raycast extension to control Cap via these deeplinks.
PauseRecording deeplink actionResumeRecording deeplink actionSwitchMicrophone deeplink action with mic_label parameterSwitchCamera deeplink action with camera_id parameterAll new actions follow the same pattern as existing StartRecording and StopRecording actions, using the existing Tauri commands.
apps/raycast-extension/cap-desktop:// deeplink scheme to communicate with the appReady for testing. The implementation wires up existing functionality, so it should work with the current recording system.
This PR adds deeplink support for pause/resume recording and device switching, plus a new Raycast extension to control Cap via these deeplinks.
Key Changes:
DeepLinkAction variants (PauseRecording, ResumeRecording, SwitchMicrophone, SwitchCamera) that call existing Tauri commandsStartRecording/StopRecording actionsIssues Found:
icon.png file will cause the Raycast extension to fail loadingstart-recording.ts hardcodes "Main Display" which will fail on systems with different display namesswitch-camera.tsx may pass incorrect format for DeviceOrModelID enum (needs {"device_id": "..."} or {"model_id": {...}} instead of plain string)The Rust deeplink implementation is solid and correctly wires up existing functionality, but the Raycast extension needs polish before it’s production-ready.
apps/raycast-extension/src/start-recording.ts (hardcoded display name) and apps/raycast-extension/src/switch-camera.tsx (incorrect enum format)| Filename | Overview |
|---|---|
| apps/desktop/src-tauri/src/deeplink_actions.rs | Added 4 new deeplink actions (pause, resume, switch mic/camera) following existing pattern |
| apps/raycast-extension/package.json | Raycast extension manifest with 6 commands, missing icon.png file |
| apps/raycast-extension/src/start-recording.ts | Start recording command with hardcoded screen name |
| apps/raycast-extension/src/switch-camera.tsx | Camera switching UI with placeholder implementation, shows not implemented toast |
| apps/raycast-extension/src/switch-microphone.tsx | Microphone switching UI with placeholder implementation, shows not implemented toast |
sequenceDiagram
participant User
participant Raycast
participant DeeplinkHandler as Cap Desktop<br/>Deeplink Handler
participant DeeplinkAction as DeepLinkAction<br/>Executor
participant RecordingModule as Recording Module<br/>(Rust)
User->>Raycast: Trigger command<br/>(e.g., Pause Recording)
Raycast->>Raycast: Build deeplink URL<br/>cap-desktop://action?value={...}
Raycast->>DeeplinkHandler: Open deeplink URL
DeeplinkHandler->>DeeplinkHandler: Parse URL to DeepLinkAction
DeeplinkHandler->>DeeplinkAction: execute()
alt PauseRecording
DeeplinkAction->>RecordingModule: pause_recording()
else ResumeRecording
DeeplinkAction->>RecordingModule: resume_recording()
else SwitchMicrophone
DeeplinkAction->>RecordingModule: set_mic_input(mic_label)
else SwitchCamera
DeeplinkAction->>RecordingModule: set_camera_input(camera_id)
end
RecordingModule-->>DeeplinkAction: Result<(), String>
DeeplinkAction-->>DeeplinkHandler: Result
DeeplinkHandler-->>Raycast: Success/Error
Raycast-->>User: Show toast notification
(2/5) Greptile learns from your feedback when you react with thumbs up/down!
Gyanu Mayank
@gyanu2507
Cap
@CapSoftware
Abhishek Verma
@w3Abhishek