mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2026-04-25 22:55:18 +00:00
fix: allow anonymous recording start and add light theme email icon (#949)
* fix: all anounimous can start recording * fix: give more schedule timeout to heavy processes * fix: add light mode support for daily icons
This commit is contained in:
committed by
GitHub
parent
f4f94a0d99
commit
08c276e4f4
@@ -524,6 +524,7 @@ async def get_participants(input: PipelineInput, ctx: Context) -> ParticipantsRe
|
|||||||
@daily_multitrack_pipeline.task(
|
@daily_multitrack_pipeline.task(
|
||||||
parents=[get_participants],
|
parents=[get_participants],
|
||||||
execution_timeout=timedelta(seconds=TIMEOUT_HEAVY),
|
execution_timeout=timedelta(seconds=TIMEOUT_HEAVY),
|
||||||
|
schedule_timeout=timedelta(seconds=TIMEOUT_HEAVY),
|
||||||
retries=3,
|
retries=3,
|
||||||
backoff_factor=2.0,
|
backoff_factor=2.0,
|
||||||
backoff_max_seconds=30,
|
backoff_max_seconds=30,
|
||||||
@@ -663,6 +664,7 @@ async def process_tracks(input: PipelineInput, ctx: Context) -> ProcessTracksRes
|
|||||||
@daily_multitrack_pipeline.task(
|
@daily_multitrack_pipeline.task(
|
||||||
parents=[process_tracks],
|
parents=[process_tracks],
|
||||||
execution_timeout=timedelta(seconds=TIMEOUT_AUDIO),
|
execution_timeout=timedelta(seconds=TIMEOUT_AUDIO),
|
||||||
|
schedule_timeout=timedelta(seconds=TIMEOUT_HEAVY),
|
||||||
retries=2,
|
retries=2,
|
||||||
backoff_factor=2.0,
|
backoff_factor=2.0,
|
||||||
backoff_max_seconds=15,
|
backoff_max_seconds=15,
|
||||||
@@ -860,6 +862,7 @@ async def generate_waveform(input: PipelineInput, ctx: Context) -> WaveformResul
|
|||||||
@daily_multitrack_pipeline.task(
|
@daily_multitrack_pipeline.task(
|
||||||
parents=[process_tracks],
|
parents=[process_tracks],
|
||||||
execution_timeout=timedelta(seconds=TIMEOUT_EXTRA_HEAVY),
|
execution_timeout=timedelta(seconds=TIMEOUT_EXTRA_HEAVY),
|
||||||
|
schedule_timeout=timedelta(seconds=TIMEOUT_HEAVY),
|
||||||
retries=3,
|
retries=3,
|
||||||
backoff_factor=2.0,
|
backoff_factor=2.0,
|
||||||
backoff_max_seconds=30,
|
backoff_max_seconds=30,
|
||||||
|
|||||||
@@ -91,9 +91,7 @@ class StartRecordingRequest(BaseModel):
|
|||||||
async def start_recording(
|
async def start_recording(
|
||||||
meeting_id: NonEmptyString,
|
meeting_id: NonEmptyString,
|
||||||
body: StartRecordingRequest,
|
body: StartRecordingRequest,
|
||||||
user: Annotated[
|
user: Annotated[Optional[auth.UserInfo], Depends(auth.current_user_optional)],
|
||||||
Optional[auth.UserInfo], Depends(auth.current_user_optional_if_public_mode)
|
|
||||||
],
|
|
||||||
) -> dict[str, Any]:
|
) -> dict[str, Any]:
|
||||||
"""Start cloud or raw-tracks recording via Daily.co REST API.
|
"""Start cloud or raw-tracks recording via Daily.co REST API.
|
||||||
|
|
||||||
|
|||||||
@@ -452,9 +452,11 @@ async def test_anonymous_cannot_webrtc_record_when_not_public(client, monkeypatc
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
async def test_anonymous_cannot_start_meeting_recording_when_not_public(
|
async def test_anonymous_can_start_meeting_recording_when_not_public(
|
||||||
client, monkeypatch
|
client, monkeypatch
|
||||||
):
|
):
|
||||||
|
"""Anonymous users can start recording since it's triggered from the frontend
|
||||||
|
and recording is at room level via Daily REST API."""
|
||||||
monkeypatch.setattr(settings, "PUBLIC_MODE", False)
|
monkeypatch.setattr(settings, "PUBLIC_MODE", False)
|
||||||
|
|
||||||
room = await rooms_controller.add(
|
room = await rooms_controller.add(
|
||||||
@@ -486,7 +488,8 @@ async def test_anonymous_cannot_start_meeting_recording_when_not_public(
|
|||||||
f"/meetings/{meeting.id}/recordings/start",
|
f"/meetings/{meeting.id}/recordings/start",
|
||||||
json={"type": "cloud", "instanceId": "00000000-0000-0000-0000-000000000001"},
|
json={"type": "cloud", "instanceId": "00000000-0000-0000-0000-000000000001"},
|
||||||
)
|
)
|
||||||
assert resp.status_code == 401, resp.text
|
# Should not be 401 (may fail for other reasons like no Daily API, but auth passes)
|
||||||
|
assert resp.status_code != 401, f"Should not get 401: {resp.text}"
|
||||||
|
|
||||||
|
|
||||||
# ======================================================================
|
# ======================================================================
|
||||||
|
|||||||
@@ -337,6 +337,10 @@ export default function DailyRoom({ meeting, room }: DailyRoomProps) {
|
|||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
const emailIconUrl = useMemo(
|
const emailIconUrl = useMemo(
|
||||||
|
() => new URL("/email-icon-dark.svg", window.location.origin),
|
||||||
|
[],
|
||||||
|
);
|
||||||
|
const emailIconDarkModeUrl = useMemo(
|
||||||
() => new URL("/email-icon.svg", window.location.origin),
|
() => new URL("/email-icon.svg", window.location.origin),
|
||||||
[],
|
[],
|
||||||
);
|
);
|
||||||
@@ -399,12 +403,13 @@ export default function DailyRoom({ meeting, room }: DailyRoomProps) {
|
|||||||
show
|
show
|
||||||
? {
|
? {
|
||||||
iconPath: emailIconUrl.href,
|
iconPath: emailIconUrl.href,
|
||||||
|
iconPathDarkMode: emailIconDarkModeUrl.href,
|
||||||
label: "Email Transcript",
|
label: "Email Transcript",
|
||||||
tooltip: "Get transcript emailed to you",
|
tooltip: "Get transcript emailed to you",
|
||||||
}
|
}
|
||||||
: null,
|
: null,
|
||||||
);
|
);
|
||||||
}, [emailIconUrl, setCustomTrayButton]);
|
}, [emailIconUrl, emailIconDarkModeUrl, setCustomTrayButton]);
|
||||||
|
|
||||||
if (authLastUserId === undefined) {
|
if (authLastUserId === undefined) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
4
www/public/email-icon-dark.svg
Normal file
4
www/public/email-icon-dark.svg
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="black" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<rect x="2" y="4" width="20" height="16" rx="2"/>
|
||||||
|
<path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 267 B |
Reference in New Issue
Block a user