Skip to content

Commit eacdb49

Browse files
committed
Refactor and Clean Up Code: Remove console logs, unused imports, and improve component structure across various files. Update session handling in Clips components and enhance video source fetching logic. Adjust button styles for consistency and improve loading states in the UI.
1 parent 1086c9d commit eacdb49

File tree

22 files changed

+189
-162
lines changed

22 files changed

+189
-162
lines changed

packages/app/app/[organization]/layout.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ const Layout = async ({
3333

3434
const userData = await fetchUserAction();
3535

36-
console.log(organization);
3736
if (!organization) {
3837
return NotFound();
3938
}

packages/app/app/api/google/callback/route.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ export async function GET(request: NextRequest) {
3131

3232
const streamEnabled = await isStreamingEnabled(tokenDetails.access_token);
3333
if (redirectUrl.includes('speaker/') && tokenDetails.channelId) {
34-
console.log('tokenDetails', tokenDetails);
3534
// store data to local storage
3635
cookies().set(
3736
'youtube_publish',

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/page.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { fetchOrganization } from '@/lib/services/organizationService';
22
import { fetchSession } from '@/lib/services/sessionService';
3-
import { fetchStage } from '@/lib/services/stageService';
3+
import { fetchStage, fetchStageRecordings } from '@/lib/services/stageService';
44
import { ClipsPageParams } from '@/lib/types';
55
import { notFound } from 'next/navigation';
66
import React, { Suspense } from 'react';
@@ -13,6 +13,7 @@ import TopBar from './topBar';
1313
import { getVideoUrlAction } from '@/lib/actions/livepeer';
1414
import { MarkersProvider } from './sidebar/markers/markersContext';
1515
import { ClipsSidebarProvider } from './sidebar/clips/ClipsContext';
16+
import { getLiveStageSrcValue } from '@/lib/utils/utils';
1617
const fetchVideoDetails = async (
1718
videoType: string,
1819
stageId: string,
@@ -23,9 +24,14 @@ const fetchVideoDetails = async (
2324
const liveStage = await fetchStage({ stage: stageId });
2425
const streamId = liveStage?.streamSettings?.streamId;
2526
if (!streamId) return null;
26-
27+
const allRecordings = await fetchStageRecordings({ streamId });
28+
if (!allRecordings) return null;
29+
const latestRecording = allRecordings[0];
2730
return {
28-
videoSrc: `https://livepeercdn.studio/hls/${liveStage.streamSettings?.playbackId}/index.m3u8`,
31+
videoSrc: getLiveStageSrcValue({
32+
playbackId: latestRecording.playbackId,
33+
recordingId: latestRecording.id,
34+
}),
2935
type: 'livepeer',
3036
name: liveStage.name,
3137
transcribe: liveStage.transcripts?.chunks,
@@ -98,7 +104,7 @@ const ClipsConfig = async ({ params, searchParams }: ClipsPageParams) => {
98104
<TopBar
99105
stageId={stageId}
100106
organization={organization}
101-
currentSessionId={sessionId}
107+
sessionId={sessionId}
102108
/>
103109
</Suspense>
104110
<ReactHlsPlayer

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/sidebar/clips/Clip.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@ export default function Clip({ session }: { session: IExtendedSession }) {
3434
getAsset();
3535
}, 10000);
3636
return () => clearInterval(interval);
37-
} else if (session.processingStatus === ProcessingStatus.pending) {
38-
const interval = setInterval(() => {
39-
router.refresh();
40-
}, 10000);
41-
return () => clearInterval(interval);
4237
}
4338
// eslint-disable-next-line react-hooks/exhaustive-deps
4439
}, [asset?.status?.phase]);

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/sidebar/clips/ClipsContext.tsx

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -58,18 +58,11 @@ export function ClipsSidebarProvider({
5858
type: SessionType.clip,
5959
});
6060
setSessions(sessions.sessions);
61-
console.log('sessions', sessions.sessions);
6261
setIsLoading(false);
6362
};
6463

6564
useEffect(() => {
66-
const timeout = setTimeout(() => {
67-
fetchSessions();
68-
}, 5000);
69-
70-
return () => {
71-
clearTimeout(timeout);
72-
};
65+
fetchSessions();
7366
}, [stageId]);
7467

7568
useEffect(() => {

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/sidebar/clips/index.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,7 @@ import { Skeleton } from '@/components/ui/skeleton';
1616

1717
const SessionSidebar = () => {
1818
const {
19-
sessions,
2019
filteredSessions,
21-
searchTerm,
2220
setSearchTerm,
2321
selectedDate,
2422
setSelectedDate,

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/sidebar/markers/index.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ const Markers = ({ sessionId }: { sessionId: string }) => {
6969
prompt: prompt,
7070
})
7171
.then((res) => {
72-
console.log(res);
7372
fetchAndSetMarkers();
7473
setIsExtracting(false);
7574
})

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/topBar/SessionSelector.tsx

Lines changed: 34 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,45 +4,56 @@ import Link from 'next/link';
44
import { ArrowLeft } from 'lucide-react';
55
import Combobox from '@/components/ui/combo-box';
66
import { useRouter } from 'next/navigation';
7-
import { IExtendedSession } from '@/lib/types';
7+
8+
interface Recording {
9+
label: string;
10+
value: string;
11+
url: string;
12+
}
13+
14+
interface SessionSelectorProps {
15+
recordings: Recording[];
16+
currentSession: Recording;
17+
stageName: string;
18+
organization: string;
19+
}
820

921
const SessionSelector = ({
1022
recordings,
11-
currentSessionId,
23+
currentSession,
1224
stageName,
1325
organization,
14-
}: {
15-
recordings: IExtendedSession[];
16-
currentSessionId: string;
17-
stageName: string;
18-
organization: string;
19-
}) => {
26+
}: SessionSelectorProps) => {
2027
const router = useRouter();
21-
const currentSession = recordings.find(
22-
(recording) => recording._id === currentSessionId
23-
);
24-
if (!currentSession) return null;
28+
29+
if (!currentSession || !recordings.length) {
30+
return null;
31+
}
32+
2533
return (
2634
<div className="p-2 flex w-full bg-white flex-row justify-between items-center">
2735
<div className="flex flex-row items-center w-full">
28-
<p className="text-md uppercase font-light mr-4">Editing {stageName}</p>
36+
<p className="text-md uppercase font-light mr-4" aria-label={`Editing stage: ${stageName}`}>
37+
Editing: {stageName}
38+
</p>
2939
<Combobox
30-
items={recordings.map((recording, index) => ({
31-
label: `Recording ${index + 1}`,
32-
value: recording._id,
33-
}))}
40+
items={recordings}
3441
variant="outline"
35-
value={currentSession._id}
42+
value={currentSession.value}
3643
setValue={(value) => {
37-
if (value) {
38-
router.push(
39-
`/studio/${organization}/clips/${currentSession.stageId}?sessionId=${value}&videoType=recording`
40-
);
44+
if (!value) return;
45+
const selectedRecording = recordings.find(rec => rec.value === value);
46+
if (selectedRecording) {
47+
router.push(selectedRecording.url);
4148
}
4249
}}
50+
aria-label="Select recording session"
4351
/>
4452
</div>
45-
<Link href={`/studio/${organization}/library?clipable=true`}>
53+
<Link
54+
href={`/studio/${organization}/library?clipable=true`}
55+
aria-label="Exit to library"
56+
>
4657
<Button variant="secondary" className="mb-2 px-2">
4758
<ArrowLeft className="mr-2 h-4 w-4" />
4859
Exit

packages/app/app/studio/[organization]/(no-side-bar)/clips/[stageId]/topBar/index.tsx

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,67 @@
11
import { fetchAllSessions } from '@/lib/services/sessionService';
2-
import { fetchStage } from '@/lib/services/stageService';
2+
import { fetchStage, fetchStageRecordings } from '@/lib/services/stageService';
33
import { SessionType } from 'streameth-new-server/src/interfaces/session.interface';
44
import SessionSelector from './SessionSelector';
5+
import { RecordingStatus } from 'livepeer/models/components';
6+
7+
interface SessionOption {
8+
label: string;
9+
value: string;
10+
url: string;
11+
}
12+
513
const TopBar = async ({
614
stageId,
715
organization,
8-
currentSessionId,
16+
sessionId,
917
}: {
1018
stageId: string;
1119
organization: string;
12-
currentSessionId: string;
20+
sessionId?: string;
1321
}) => {
14-
const stage = await fetchStage({ stage: stageId });
15-
if (!stage) return null;
16-
const allRecordings = await fetchAllSessions({
17-
stageId,
18-
type: SessionType.livestream,
22+
const [allSessions, stage] = await Promise.all([
23+
fetchAllSessions({
24+
stageId,
25+
type: SessionType.livestream,
26+
}),
27+
fetchStage({ stage: stageId }),
28+
]);
29+
30+
const stageRecordings = await fetchStageRecordings({
31+
streamId: stage?.streamSettings?.streamId || '',
1932
});
20-
const recordings = allRecordings.sessions;
33+
34+
const hasActiveLivestream = stageRecordings?.some(
35+
(recording) => recording.recordingStatus === RecordingStatus.Waiting
36+
);
37+
const sessionOptions: SessionOption[] = allSessions.sessions.map(
38+
(session) => ({
39+
label: session.name,
40+
value: session._id,
41+
url: `/studio/${organization}/clips/${stageId}?sessionId=${session._id}&videoType=recording`,
42+
})
43+
);
44+
45+
let currentSession: SessionOption;
46+
currentSession =
47+
sessionOptions.find((session) => session.value === sessionId) ||
48+
sessionOptions[0];
49+
50+
if (!sessionId || hasActiveLivestream) {
51+
// Add live option when sessionId is provided
52+
const liveOption: SessionOption = {
53+
label: 'Live',
54+
value: stageId,
55+
url: `/studio/${organization}/clips/${stageId}?videoType=livestream`,
56+
};
57+
sessionOptions.push(liveOption);
58+
!sessionId && (currentSession = liveOption);
59+
}
2160
return (
2261
<SessionSelector
23-
recordings={recordings}
24-
currentSessionId={currentSessionId}
25-
stageName={stage?.name}
62+
recordings={sessionOptions}
63+
currentSession={currentSession}
64+
stageName={stage?.name || ''}
2665
organization={organization}
2766
/>
2867
);

packages/app/app/studio/[organization]/(root)/library/[session]/components/SessionTranscriptions.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ const SessionTranscriptions = ({
2929
sessionId,
3030
})
3131
.then((response) => {
32-
console.log('response', response);
3332
if (response) {
3433
toast.success('Transcription request sent successfully');
3534
} else {

packages/app/app/studio/[organization]/(root)/library/[session]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const EditSession = async ({ params, searchParams }: studioPageParams) => {
3737
<h1 className="text-lg font-bold mb-4">Video Details</h1>
3838
<div className="mb-4">
3939
<Link href={`/studio/${params.organization}/library`}>
40-
<Button variant="ghost" className="mb-2 px-2">
40+
<Button variant="secondary" className="mb-2 px-2">
4141
<ArrowLeft className="mr-2 h-4 w-4" />
4242
Back to homepage
4343
</Button>

packages/app/app/studio/[organization]/(root)/library/components/VisibilityButton.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import { IExtendedSession } from '@/lib/types';
44
import { updateSessionAction } from '@/lib/actions/sessions';
5-
import { Globe, Lock, Loader2, Binoculars, EyeClosed } from 'lucide-react';
5+
import { Globe, Lock, Loader2, Binoculars, ScanEye } from 'lucide-react';
66
import { useState } from 'react';
77
import {
88
DropdownMenuPortal,
@@ -87,7 +87,7 @@ const VisibilityButton = ({ session }: { session: IExtendedSession }) => {
8787
className="flex items-center space-x-2 cursor-pointer"
8888
value={eVisibilty.unlisted}
8989
>
90-
<EyeClosed className="w-4 h-4" />
90+
<ScanEye className="w-4 h-4" />
9191
<span>Unlisted</span>
9292
</DropdownMenuRadioItem>
9393
<DropdownMenuRadioItem

packages/app/app/studio/[organization]/(root)/livestreams/[streamId]/components/Sidebar.tsx

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import {
77
} from '@/lib/types';
88
import Destinations from './Destinations';
99
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@/components/ui/tabs';
10-
import ClipsList from './ClipsList';
1110
import { Card } from '@/components/ui/card';
1211

1312
const Sidebar = ({
@@ -22,18 +21,20 @@ const Sidebar = ({
2221
return (
2322
<Card className="md:shadow-none w-full flex flex-col h-[calc(100vh-12rem)] mb-4 overflow-hidden">
2423
<Tabs defaultValue="destinations" className="flex flex-col h-full">
25-
<TabsList className="grid grid-cols-2 w-full">
26-
<TabsTrigger value="destinations">Destinations</TabsTrigger>
27-
<TabsTrigger value="clips">Clips</TabsTrigger>
24+
<TabsList className=" w-full">
25+
<TabsTrigger value="destinations" className="w-full">
26+
Destinations
27+
</TabsTrigger>
28+
{/* <TabsTrigger value="clips">Clips</TabsTrigger> */}
2829
</TabsList>
29-
<TabsContent className="flex-grow overflow-hidden" value="clips">
30+
{/* <TabsContent className="flex-grow overflow-hidden" value="clips">
3031
<div className="h-full overflow-y-auto">
3132
<ClipsList
3233
organizationSlug={organization.slug!}
3334
sessions={sessions}
3435
/>
3536
</div>
36-
</TabsContent>
37+
</TabsContent> */}
3738
<TabsContent className="flex-grow overflow-hidden" value="destinations">
3839
<div className="h-full overflow-y-auto">
3940
<Destinations stream={stage} organization={organization} />

0 commit comments

Comments
 (0)