Adds deeplink support for controlling recording state and a new Raycast extension.
PauseRecording, ResumeRecording, CycleMicrophone, CycleCamera, StartDefaultRecording to deeplink_actions.rs.lib.rs for pausing, resuming, and cycling inputs.cap-control with commands to Start, Stop, Pause, Resume, and Switch inputs.pnpm dev:desktop.cap-desktop://action?value="start_default_recording" to start.cap-desktop://action?value="pause_recording" to pause.cap-desktop://action?value="resume_recording" to resume.cap-desktop://action?value="cycle_microphone" to switch mic.apps/raycast-extension and test commands./closes #1540 /claim #1540
Added deeplink support for controlling recording state (pause, resume, cycle microphone/camera) and created a new Raycast extension to invoke these deeplinks. The Raycast extension provides commands for starting, stopping, pausing, resuming recordings, and switching camera/microphone inputs.
Major Changes:
StartDefaultRecording, PauseRecording, ResumeRecording, SetMicrophone, SetCamera, CycleMicrophone, CycleCameracycle_mic_input() and cycle_camera_input() in lib.rscap-desktop:// URLsrecording::pause_recording() and recording::resume_recording() functions from recording.rsCritical Issues Found:
cycle_mic_input and cycle_camera_input not registered in the command collection, making them uncallableCycleMicrophone and CycleCamera deeplink handlers (inconsistent with SetMicrophone and SetCamera)Positive Notes:
| Filename | Overview |
|---|---|
| apps/desktop/src-tauri/src/deeplink_actions.rs | Added new deeplink actions (pause, resume, cycle inputs). Has critical duplicate match arms causing compilation failure. |
| apps/desktop/src-tauri/src/lib.rs | Added cycle_mic_input and cycle_camera_input functions. Has multiple critical syntax errors: duplicate permission checks, orphaned braces, duplicate variable assignments, and missing command registration. |
| apps/raycast-extension/README.md | Documentation for Raycast extension. Has duplicate build step with conflicting commands. |
sequenceDiagram
participant Raycast
participant DeeplinkURL
participant DeeplinkHandler
participant App
participant Recording
participant MicFeed
participant Camera
Note over Raycast,Camera: Start Recording Flow
Raycast->>DeeplinkURL: cap-desktop://action?value="start_default_recording"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>DeeplinkHandler: Check screen recording permission
DeeplinkHandler->>App: list_displays()
App-->>DeeplinkHandler: displays[]
DeeplinkHandler->>Recording: start_recording(display, mode=Instant)
Recording-->>Raycast: Recording started
Note over Raycast,Camera: Pause/Resume Flow
Raycast->>DeeplinkURL: cap-desktop://action?value="pause_recording"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>Recording: pause_recording()
Recording->>Recording: Emit RecordingEvent::Paused
Recording-->>Raycast: Recording paused
Raycast->>DeeplinkURL: cap-desktop://action?value="resume_recording"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>Recording: resume_recording()
Recording->>Recording: Emit RecordingEvent::Resumed
Recording-->>Raycast: Recording resumed
Note over Raycast,Camera: Cycle Microphone Flow
Raycast->>DeeplinkURL: cap-desktop://action?value="cycle_microphone"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>App: cycle_mic_input()
App->>App: Check microphone permission
App->>MicFeed: list()
MicFeed-->>App: mic_list[]
App->>App: Find current + select next
App->>App: set_mic_input(next_label)
App-->>Raycast: Microphone switched
Note over Raycast,Camera: Cycle Camera Flow
Raycast->>DeeplinkURL: cap-desktop://action?value="cycle_camera"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>App: cycle_camera_input()
App->>App: Check camera permission
App->>Camera: list_cameras()
Camera-->>App: camera_list[]
App->>App: Find current + select next
App->>App: set_camera_input(next_id)
App-->>Raycast: Camera switched
Note over Raycast,Camera: Stop Recording Flow
Raycast->>DeeplinkURL: cap-desktop://action?value="stop_recording"
DeeplinkURL->>DeeplinkHandler: Parse action
DeeplinkHandler->>Recording: stop_recording()
Recording-->>Raycast: Recording stopped
Excellencedev
@Excellencedev
Cap
@CapSoftware