pub enum Event {
PermissionStatus {
permission: Permission,
status: PermissionGranted,
},
PermissionsGranted,
MeetingDetected {
app: String,
pid: u32,
},
MeetingUpdated {
app: String,
title: String,
},
MeetingEnded {
app: String,
},
RecordingStarted {
app: String,
},
RecordingEnded {
app: String,
},
RecordingReady {
mixed_path: PathBuf,
others_path: PathBuf,
self_path: PathBuf,
app: String,
},
CaptureStatus {
kind: CaptureKind,
capturing: bool,
},
Error {
message: String,
},
SpeakerChanged {
speakers: Vec<String>,
app: String,
},
}Expand description
All events emitted by MeetingListener.
Register handlers with MeetingListener::on.
Multiple handlers for the same event are all called in registration order.
Lifecycle order for a recorded meeting:
PermissionStatus × N (macOS only, on start)
PermissionsGranted (macOS only, once all perms OK)
MeetingDetected (meeting begins)
MeetingUpdated (title becomes known via window scan)
RecordingStarted (if record() was called)
MeetingEnded (meeting stops)
RecordingEnded (capture stopped, WAV being written)
RecordingReady (WAV file written to disk)Variants§
PermissionStatus
Status of an individual permission, emitted once per permission on
MeetingListener::start. macOS only; not emitted on Windows / Linux
where no permissions are required.
PermissionsGranted
All required permissions are granted; recording can proceed. Emitted immediately on non-macOS platforms.
MeetingDetected
A Teams / Zoom / Google Meet session was detected (new start, or already in progress when the listener started).
MeetingUpdated
Meeting metadata became known — currently the window title once the window watcher identifies the call window.
MeetingEnded
The meeting has ended.
RecordingStarted
Audio capture has begun. Fired when MeetingListener::record
successfully starts the system audio tap.
RecordingEnded
Audio capture has stopped. The WAV is being written; expect
Event::RecordingReady shortly after.
RecordingReady
A completed recording is ready. Three WAV files are produced:
mixed_path— tap + mic combined (full meeting audio)others_path— system-tap only (what other participants said)self_path— microphone only (what you said)
Only fired when MeetingListener::record (or
MeetingListener::auto_record) was active during the meeting.
Fields
CaptureStatus
The audio or video capture stream was interrupted or resumed. For example, moving the meeting window to an inactive virtual desktop may interrupt capture.
Error
An error occurred (e.g. the audio tap failed to start).
SpeakerChanged
The set of visually-detected speaking participants changed. Empty \ means silence / no chromatic ring detected. macOS only; never emitted on other platforms.