mirror of
https://github.com/kjanat/livedash-node.git
synced 2026-01-16 19:32:08 +01:00
Adds a transcript viewer component to display transcript content within the session details page. This change introduces a new `TranscriptViewer` component that renders the transcript content if available. It also adds logic to fetch and store transcript content from the provided URL during session data refresh. The existing link-based transcript view is now used as a fallback when only the transcript URL is available. It also fixes an issue where session ID was not properly displayed.
88 lines
2.8 KiB
TypeScript
88 lines
2.8 KiB
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
|
|
const prisma = new PrismaClient();
|
|
|
|
async function main() {
|
|
console.log("Starting to fetch missing transcripts...");
|
|
|
|
const sessionsToUpdate = await prisma.session.findMany({
|
|
where: {
|
|
AND: [
|
|
{ fullTranscriptUrl: { not: null } },
|
|
{ fullTranscriptUrl: { not: "" } }, // Ensure URL is not an empty string
|
|
{ transcriptContent: null },
|
|
],
|
|
},
|
|
select: {
|
|
id: true,
|
|
fullTranscriptUrl: true,
|
|
},
|
|
});
|
|
|
|
if (sessionsToUpdate.length === 0) {
|
|
console.log("No sessions found requiring transcript fetching.");
|
|
return;
|
|
}
|
|
|
|
console.log(`Found ${sessionsToUpdate.length} sessions to update.`);
|
|
let successCount = 0;
|
|
let errorCount = 0;
|
|
|
|
for (const session of sessionsToUpdate) {
|
|
if (!session.fullTranscriptUrl) {
|
|
// Should not happen due to query, but good for type safety
|
|
console.warn(`Session ${session.id} has no fullTranscriptUrl, skipping.`);
|
|
continue;
|
|
}
|
|
|
|
console.log(
|
|
`Fetching transcript for session ${session.id} from ${session.fullTranscriptUrl}...`
|
|
);
|
|
try {
|
|
const response = await fetch(session.fullTranscriptUrl);
|
|
if (!response.ok) {
|
|
console.error(
|
|
`Failed to fetch transcript for session ${session.id}: ${response.status} ${response.statusText}`
|
|
);
|
|
const errorBody = await response.text();
|
|
console.error(`Error details: ${errorBody.substring(0, 500)}`); // Log first 500 chars of error
|
|
errorCount++;
|
|
continue;
|
|
}
|
|
|
|
const transcriptText = await response.text();
|
|
|
|
if (transcriptText.trim() === "") {
|
|
console.warn(
|
|
`Fetched empty transcript for session ${session.id}. Storing as empty string.`
|
|
);
|
|
}
|
|
|
|
await prisma.session.update({
|
|
where: { id: session.id },
|
|
data: { transcriptContent: transcriptText },
|
|
});
|
|
console.log(
|
|
`Successfully fetched and stored transcript for session ${session.id}.`
|
|
);
|
|
successCount++;
|
|
} catch (error) {
|
|
console.error(`Error processing session ${session.id}:`, error);
|
|
errorCount++;
|
|
}
|
|
}
|
|
|
|
console.log("Transcript fetching complete.");
|
|
console.log(`Successfully updated: ${successCount} sessions.`);
|
|
console.log(`Failed to update: ${errorCount} sessions.`);
|
|
}
|
|
|
|
main()
|
|
.catch((e) => {
|
|
console.error("An error occurred during the script execution:", e);
|
|
process.exitCode = 1;
|
|
})
|
|
.finally(async () => {
|
|
await prisma.$disconnect();
|
|
});
|