diff --git a/pickleglass_web/app/activity/details/page.tsx b/pickleglass_web/app/activity/details/page.tsx index f00f71a..f2069b5 100644 --- a/pickleglass_web/app/activity/details/page.tsx +++ b/pickleglass_web/app/activity/details/page.tsx @@ -2,7 +2,7 @@ import { useState, useEffect, Suspense } from 'react' import { useRedirectIfNotAuth } from '@/utils/auth' -import { useSearchParams } from 'next/navigation' +import { useSearchParams, useRouter } from 'next/navigation' import Link from 'next/link' import { UserProfile, @@ -10,6 +10,7 @@ import { Transcript, AiMessage, getSessionDetails, + deleteSession, } from '@/utils/api' type ConversationItem = (Transcript & { type: 'transcript' }) | (AiMessage & { type: 'ai_message' }); @@ -29,6 +30,8 @@ function SessionDetailsContent() { const [isLoading, setIsLoading] = useState(true); const searchParams = useSearchParams(); const sessionId = searchParams.get('sessionId'); + const router = useRouter(); + const [deleting, setDeleting] = useState(false); useEffect(() => { if (userInfo && sessionId) { @@ -47,6 +50,20 @@ function SessionDetailsContent() { } }, [userInfo, sessionId]); + const handleDelete = async () => { + if (!sessionId) return; + if (!window.confirm('Are you sure you want to delete this activity? This cannot be undone.')) return; + setDeleting(true); + try { + await deleteSession(sessionId); + router.push('/activity'); + } catch (error) { + alert('Failed to delete activity.'); + setDeleting(false); + console.error(error); + } + }; + if (!userInfo || isLoading) { return (
@@ -92,14 +109,23 @@ function SessionDetailsContent() {
-
-

- {sessionDetails.session.title || `Conversation on ${new Date(sessionDetails.session.started_at * 1000).toLocaleDateString()}`} -

-
- {new Date(sessionDetails.session.started_at * 1000).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })} - {new Date(sessionDetails.session.started_at * 1000).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true })} +
+
+

+ {sessionDetails.session.title || `Conversation on ${new Date(sessionDetails.session.started_at * 1000).toLocaleDateString()}`} +

+
+ {new Date(sessionDetails.session.started_at * 1000).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })} + {new Date(sessionDetails.session.started_at * 1000).toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true })} +
+
{sessionDetails.summary && ( diff --git a/pickleglass_web/app/activity/page.tsx b/pickleglass_web/app/activity/page.tsx index 2909c45..663c17a 100644 --- a/pickleglass_web/app/activity/page.tsx +++ b/pickleglass_web/app/activity/page.tsx @@ -7,12 +7,14 @@ import { UserProfile, Session, getSessions, + deleteSession, } from '@/utils/api' export default function ActivityPage() { const userInfo = useRedirectIfNotAuth() as UserProfile | null; const [sessions, setSessions] = useState([]) const [isLoading, setIsLoading] = useState(true) + const [deletingId, setDeletingId] = useState(null) const fetchSessions = async () => { try { @@ -47,6 +49,20 @@ export default function ActivityPage() { return 'Good evening' } + const handleDelete = async (sessionId: string) => { + if (!window.confirm('Are you sure you want to delete this activity? This cannot be undone.')) return; + setDeletingId(sessionId); + try { + await deleteSession(sessionId); + setSessions(sessions => sessions.filter(s => s.id !== sessionId)); + } catch (error) { + alert('Failed to delete activity.'); + console.error(error); + } finally { + setDeletingId(null); + } + } + return (
@@ -67,17 +83,28 @@ export default function ActivityPage() { ) : sessions.length > 0 ? (
{sessions.map((session) => ( - +
-

{session.title || `Conversation - ${new Date(session.started_at * 1000).toLocaleDateString()}`}

- - {new Date(session.started_at * 1000).toLocaleString()} - +
+ + {session.title || `Conversation - ${new Date(session.started_at * 1000).toLocaleDateString()}`} + +
+ {new Date(session.started_at * 1000).toLocaleString()} +
+
+
- - Conversation - - + + Conversation + +
))}
) : ( diff --git a/src/features/listen/liveSummaryService.js b/src/features/listen/liveSummaryService.js index 56bbe08..85cbbd1 100644 --- a/src/features/listen/liveSummaryService.js +++ b/src/features/listen/liveSummaryService.js @@ -527,6 +527,8 @@ async function saveConversationTurn(speaker, transcription) { } async function initializeLiveSummarySession(language = 'en') { + // Use system environment variable if set, otherwise use the provided language + const effectiveLanguage = process.env.OPENAI_TRANSCRIBE_LANG || language || 'en'; if (isInitializingSession) { console.log('Session initialization already in progress.'); return false; @@ -623,7 +625,7 @@ async function initializeLiveSummarySession(language = 'en') { }; const mySttConfig = { - language: language, + language: effectiveLanguage, callbacks: { onmessage: handleMyMessage, onerror: error => console.error('My STT session error:', error.message), @@ -631,7 +633,7 @@ async function initializeLiveSummarySession(language = 'en') { }, }; const theirSttConfig = { - language: language, + language: effectiveLanguage, callbacks: { onmessage: handleTheirMessage, onerror: error => console.error('Their STT session error:', error.message),