From 418a84e4634be80a5ecd845ff1bdd749f2bced91 Mon Sep 17 00:00:00 2001 From: plyght Date: Mon, 30 Jun 2025 22:28:49 -0700 Subject: [PATCH 1/3] init consent messages --- .../editor-area/note-header/listen-button.tsx | 32 ++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) 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..3cbb82099 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,35 @@ 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 { 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"; +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: () => {}, + primary: true, + }, + { + label: "Remind me in 30s", + onClick: () => { + setTimeout(() => showConsentNotification(), 30000); + }, + }, + ], + dismissible: true, + duration: 15000, + }); +}; + export default function ListenButton({ sessionId }: { sessionId: string }) { const { onboardingSessionId } = useHypr(); const isOnboarding = sessionId === onboardingSessionId; @@ -40,6 +64,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, From 43737b0923feddaca5d0e7e8334083d628dc71a3 Mon Sep 17 00:00:00 2001 From: plyght Date: Tue, 1 Jul 2025 15:08:37 -0700 Subject: [PATCH 2/3] fixes: coderabbit --- .../editor-area/note-header/listen-button.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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 3cbb82099..02a1401af 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 @@ -17,6 +17,8 @@ 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", @@ -25,13 +27,21 @@ const showConsentNotification = () => { buttons: [ { label: "I've notified everyone", - onClick: () => {}, + onClick: () => { + toast.dismiss("recording-consent-reminder"); + }, primary: true, }, { label: "Remind me in 30s", onClick: () => { - setTimeout(() => showConsentNotification(), 30000); + if (consentReminderTimeoutId) { + clearTimeout(consentReminderTimeoutId); + } + consentReminderTimeoutId = setTimeout(() => { + showConsentNotification(); + consentReminderTimeoutId = null; + }, 30000); }, }, ], From e2ef82b673cd6fc93f0fa39573795bff104fe975 Mon Sep 17 00:00:00 2001 From: plyght Date: Tue, 1 Jul 2025 19:36:51 -0700 Subject: [PATCH 3/3] fix --- .../editor-area/note-header/listen-button.tsx | 4 ++-- apps/desktop/src/locales/en/messages.po | 14 +++++++------- apps/desktop/src/locales/ko/messages.po | 14 +++++++------- 3 files changed, 16 insertions(+), 16 deletions(-) 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 02a1401af..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 @@ -11,7 +11,7 @@ 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 { toast } from "@hypr/ui/components/ui/toast"; +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"; @@ -28,7 +28,7 @@ const showConsentNotification = () => { { label: "I've notified everyone", onClick: () => { - toast.dismiss("recording-consent-reminder"); + sonnerToast.dismiss("recording-consent-reminder"); }, primary: true, }, 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 ""