diff --git a/apps/desktop/src/components/editor-area/note-header/listen-button.tsx b/apps/desktop/src/components/editor-area/note-header/listen-button.tsx index 4cf15c07d..b91cefd69 100644 --- a/apps/desktop/src/components/editor-area/note-header/listen-button.tsx +++ b/apps/desktop/src/components/editor-area/note-header/listen-button.tsx @@ -1,7 +1,7 @@ import { Trans } from "@lingui/react/macro"; import { useMutation, useQuery } from "@tanstack/react-query"; import { MicIcon, MicOffIcon, PauseIcon, PlayIcon, StopCircleIcon, Volume2Icon, VolumeOffIcon } from "lucide-react"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import SoundIndicator from "@/components/sound-indicator"; import { useHypr } from "@/contexts"; @@ -11,11 +11,45 @@ import { commands as localSttCommands } from "@hypr/plugin-local-stt"; import { Button } from "@hypr/ui/components/ui/button"; import { Popover, PopoverContent, PopoverTrigger } from "@hypr/ui/components/ui/popover"; import { Spinner } from "@hypr/ui/components/ui/spinner"; +import { sonnerToast, toast } from "@hypr/ui/components/ui/toast"; import { Tooltip, TooltipContent, TooltipTrigger } from "@hypr/ui/components/ui/tooltip"; import { cn } from "@hypr/ui/lib/utils"; import { useOngoingSession, useSession } from "@hypr/utils/contexts"; import ShinyButton from "./shiny-button"; +let consentReminderTimeoutId: NodeJS.Timeout | null = null; + +const showConsentNotification = () => { + toast({ + id: "recording-consent-reminder", + title: "🔴 Recording Started", + content: "Don't forget to notify others that you're recording this session for transparency and consent.", + buttons: [ + { + label: "I've notified everyone", + onClick: () => { + sonnerToast.dismiss("recording-consent-reminder"); + }, + primary: true, + }, + { + label: "Remind me in 30s", + onClick: () => { + if (consentReminderTimeoutId) { + clearTimeout(consentReminderTimeoutId); + } + consentReminderTimeoutId = setTimeout(() => { + showConsentNotification(); + consentReminderTimeoutId = null; + }, 30000); + }, + }, + ], + dismissible: true, + duration: 15000, + }); +}; + export default function ListenButton({ sessionId }: { sessionId: string }) { const { onboardingSessionId } = useHypr(); const isOnboarding = sessionId === onboardingSessionId; @@ -40,6 +74,12 @@ export default function ListenButton({ sessionId }: { sessionId: string }) { loading: s.loading, })); + useEffect(() => { + if (ongoingSessionStatus === "running_active" && sessionId === ongoingSessionId && !isOnboarding) { + showConsentNotification(); + } + }, [ongoingSessionStatus, sessionId, ongoingSessionId, isOnboarding]); + const isEnhancePending = useEnhancePendingState(sessionId); const nonEmptySession = useSession( sessionId, diff --git a/apps/desktop/src/locales/en/messages.po b/apps/desktop/src/locales/en/messages.po index c5f294b86..65291db81 100644 --- a/apps/desktop/src/locales/en/messages.po +++ b/apps/desktop/src/locales/en/messages.po @@ -256,8 +256,8 @@ msgstr "(Beta) Upcoming meeting notifications" #. placeholder {0}: disabled ? "Wait..." : isHovered ? "Resume" : "Ended" #: src/components/settings/components/calendar/cloud-calendar-integration-details.tsx:36 #: src/components/settings/components/ai/wer-modal.tsx:116 -#: src/components/editor-area/note-header/listen-button.tsx:151 -#: src/components/editor-area/note-header/listen-button.tsx:190 +#: src/components/editor-area/note-header/listen-button.tsx:191 +#: src/components/editor-area/note-header/listen-button.tsx:230 msgid "{0}" msgstr "{0}" @@ -860,7 +860,7 @@ msgstr "Optional for participant suggestions" msgid "Owner" msgstr "Owner" -#: src/components/editor-area/note-header/listen-button.tsx:277 +#: src/components/editor-area/note-header/listen-button.tsx:317 msgid "Pause" msgstr "Pause" @@ -872,7 +872,7 @@ msgstr "people" msgid "Performance difference between languages" msgstr "Performance difference between languages" -#: src/components/editor-area/note-header/listen-button.tsx:170 +#: src/components/editor-area/note-header/listen-button.tsx:210 msgid "Play video" msgstr "Play video" @@ -916,7 +916,7 @@ msgstr "Required to transcribe other people's voice during meetings" msgid "Required to transcribe your voice during meetings" msgstr "Required to transcribe your voice during meetings" -#: src/components/editor-area/note-header/listen-button.tsx:79 +#: src/components/editor-area/note-header/listen-button.tsx:119 msgid "Resume" msgstr "Resume" @@ -1006,11 +1006,11 @@ msgstr "Start Annual Plan" msgid "Start Monthly Plan" msgstr "Start Monthly Plan" -#: src/components/editor-area/note-header/listen-button.tsx:126 +#: src/components/editor-area/note-header/listen-button.tsx:166 msgid "Start recording" msgstr "Start recording" -#: src/components/editor-area/note-header/listen-button.tsx:285 +#: src/components/editor-area/note-header/listen-button.tsx:325 msgid "Stop" msgstr "Stop" diff --git a/apps/desktop/src/locales/ko/messages.po b/apps/desktop/src/locales/ko/messages.po index 04e8e111c..0d76ca83a 100644 --- a/apps/desktop/src/locales/ko/messages.po +++ b/apps/desktop/src/locales/ko/messages.po @@ -256,8 +256,8 @@ msgstr "" #. placeholder {0}: disabled ? "Wait..." : isHovered ? "Resume" : "Ended" #: src/components/settings/components/calendar/cloud-calendar-integration-details.tsx:36 #: src/components/settings/components/ai/wer-modal.tsx:116 -#: src/components/editor-area/note-header/listen-button.tsx:151 -#: src/components/editor-area/note-header/listen-button.tsx:190 +#: src/components/editor-area/note-header/listen-button.tsx:191 +#: src/components/editor-area/note-header/listen-button.tsx:230 msgid "{0}" msgstr "" @@ -860,7 +860,7 @@ msgstr "" msgid "Owner" msgstr "" -#: src/components/editor-area/note-header/listen-button.tsx:277 +#: src/components/editor-area/note-header/listen-button.tsx:317 msgid "Pause" msgstr "" @@ -872,7 +872,7 @@ msgstr "" msgid "Performance difference between languages" msgstr "" -#: src/components/editor-area/note-header/listen-button.tsx:170 +#: src/components/editor-area/note-header/listen-button.tsx:210 msgid "Play video" msgstr "" @@ -916,7 +916,7 @@ msgstr "" msgid "Required to transcribe your voice during meetings" msgstr "" -#: src/components/editor-area/note-header/listen-button.tsx:79 +#: src/components/editor-area/note-header/listen-button.tsx:119 msgid "Resume" msgstr "" @@ -1006,11 +1006,11 @@ msgstr "" msgid "Start Monthly Plan" msgstr "" -#: src/components/editor-area/note-header/listen-button.tsx:126 +#: src/components/editor-area/note-header/listen-button.tsx:166 msgid "Start recording" msgstr "" -#: src/components/editor-area/note-header/listen-button.tsx:285 +#: src/components/editor-area/note-header/listen-button.tsx:325 msgid "Stop" msgstr ""