From 7d509e2ba6eb5b946b26dbf0b46dfa654b81266b Mon Sep 17 00:00:00 2001 From: Johnny Zheng <jzheng2@emich.edu> Date: Wed, 19 Mar 2025 03:12:34 -0400 Subject: [PATCH] Fixed merge issues --- package-lock.json | 151 ++++++++++++++++++++++++++++++++ package.json | 2 + src/App.tsx | 10 ++- src/components/FileUploader.tsx | 57 +++++++++--- 4 files changed, 204 insertions(+), 16 deletions(-) diff --git a/package-lock.json b/package-lock.json index 54dee33..e0214aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -43,6 +43,8 @@ "react-swipeable": "^7.0.2", "routes": "^2.1.0", "save-dev": "^0.0.1-security", + "socket.io-client": "^4.8.1", + "uuid": "^11.1.0", "vite-plugin-fs": "^1.1.0" }, "devDependencies": { @@ -2087,6 +2089,12 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "license": "MIT" }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "license": "MIT" + }, "node_modules/@testing-library/dom": { "version": "10.4.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", @@ -3846,6 +3854,66 @@ "node": ">= 0.8" } }, + "node_modules/engine.io-client": { + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz", + "integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1", + "xmlhttprequest-ssl": "~2.1.1" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -7676,6 +7744,68 @@ "node": ">=10" } }, + "node_modules/socket.io-client": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz", + "integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.6.1", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "license": "MIT", + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -8220,6 +8350,19 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, "node_modules/varint": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", @@ -8602,6 +8745,14 @@ "dev": true, "license": "MIT" }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz", + "integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 93e88e6..943e12c 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,8 @@ "react-swipeable": "^7.0.2", "routes": "^2.1.0", "save-dev": "^0.0.1-security", + "socket.io-client": "^4.8.1", + "uuid": "^11.1.0", "vite-plugin-fs": "^1.1.0" }, "devDependencies": { diff --git a/src/App.tsx b/src/App.tsx index 6e8faba..d9212d9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -638,6 +638,12 @@ function Home() { })); }; + useEffect(() => { + if (currentVideo) { + setVideoInfo(); + } + }, [currentVideo]); + console.log("Reply Liked State Before Rendering:", replyLiked); return ( @@ -737,7 +743,7 @@ function Home() { > <div className="comments-list"> {comments.map((c) => ( - <div key={c.id} className="comment-box"> + <div key={c.id} className="comment-box" style={{color:"black", textAlign: "left"}}> <p> <strong>{c.username}</strong> ({c.created_at}): {c.comment} </p> @@ -745,7 +751,7 @@ function Home() { <div style={{ display: "flex", gap: "5x" }}> {/* Toggle button for showing/hiding replies using icons */} {c.replies && c.replies.length > 0 && ( - <div style={{ width: "24px", textAlign: "center" }}> + <div style={{ width: "24px", textAlign: "left", color:"black" }}> <button onClick={() => toggleRepliesVisible(c.id)} style={{ diff --git a/src/components/FileUploader.tsx b/src/components/FileUploader.tsx index 0b72653..c67e343 100644 --- a/src/components/FileUploader.tsx +++ b/src/components/FileUploader.tsx @@ -1,4 +1,4 @@ -import { ChangeEvent, useState } from "react"; +import { ChangeEvent, useState, useEffect } from "react"; import axios from "axios"; import "dotenv"; import { io, Socket } from "socket.io-client"; @@ -10,15 +10,9 @@ import "../styles/auth.scss"; let uploadServer = "http://localhost:3001"; if (import.meta.env.VITE_UPLOAD_SERVER !== undefined) { - // console.log(import.meta.env.VITE_UPLOAD_SERVER); uploadServer = import.meta.env.VITE_UPLOAD_SERVER; } -// let loginServer = "http://localhost:8081" -// if (import.meta.env.VITE_LOGIN_SERVER !== undefined) { -// // console.log(import.meta.env.VITE_UPLOAD_SERVER); -// loginServer = import.meta.env.VITE_LOGIN_SERVER; -// } interface FormValues { title: string; desc: string; @@ -42,6 +36,38 @@ export default function FileUploader() { }); const [status, setStatus] = useState<UploadStatus>("idle"); const [uploadProgress, setUploadProgress] = useState(0); + const [transcodingProgress, setTranscodingProgress] = useState(0); + const [sessionId] = useState<string>(uuidv4()); // Generate unique session ID + const [socket, setSocket] = useState<Socket | null>(null); + + // Connect to socket.io server + useEffect(() => { + const newSocket = io(uploadServer); + + newSocket.on("connect", () => { + console.log("Connected to server"); + }); + + newSocket.on("transcode-progress", (data) => { + if (data.sessionId === sessionId || data.sessionId === "unknown") { + console.log(`Transcoding progress: ${data.progress}%`); + setTranscodingProgress(data.progress); + + if (data.complete) { + setStatus("success"); + } else if (status !== "transcoding" && data.progress > 0) { + setStatus("transcoding"); + } + } + }); + + setSocket(newSocket); + + // Clean up on unmount + return () => { + newSocket.disconnect(); + }; + }, [sessionId]); function handleTitleChange(e: ChangeEvent<HTMLInputElement>) { setTitle(e.target.value); @@ -59,11 +85,7 @@ export default function FileUploader() { setValues({ ...values, fileName: e.target.files[0].name }); } } - /** - * Checks to see if a file is an MP4 - * @param file - * @returns - */ + function isMP4(file: File) { const fileName: string = file.name; const fileExtension = fileName?.split(".").pop()?.toLowerCase(); @@ -88,11 +110,14 @@ export default function FileUploader() { } setStatus("uploading"); + setUploadProgress(0); + setTranscodingProgress(0); const formData = new FormData(); formData.append("file", file); formData.append("title", title); formData.append("description", desc); + formData.append("sessionId", sessionId); const token = localStorage.getItem("authToken"); // Retrieve JWT token try { @@ -109,8 +134,12 @@ export default function FileUploader() { }, }); + // After successful upload, the server will start transcoding + // We'll now show transcoding progress through socket.io + setStatus("transcoding"); setStatus("success"); - } catch { + } catch (error) { + console.error("Upload error:", error); setStatus("error"); } } @@ -208,4 +237,4 @@ export default function FileUploader() { `}</style> */} </div> ); -} +} \ No newline at end of file -- GitLab