From 9c44dfe598ae26dee847c3fe2df43bcd544dc1b3 Mon Sep 17 00:00:00 2001 From: Chris-1010 <122332721@umail.ucc.ie> Date: Thu, 6 Mar 2025 22:40:21 +0000 Subject: [PATCH] UPDATE: Display altered message in chat when sent by streamer; FIX: Chat order; FIX: `num_viewers` display on `HomePage`; FIX: Remove ability for streamer to follow themselves; --- frontend/src/components/Stream/ChatPanel.tsx | 18 ++++- frontend/src/pages/VideoPage.tsx | 77 ++++++++++---------- web_server/blueprints/chat.py | 7 +- web_server/utils/recommendation_utils.py | 2 +- 4 files changed, 59 insertions(+), 45 deletions(-) diff --git a/frontend/src/components/Stream/ChatPanel.tsx b/frontend/src/components/Stream/ChatPanel.tsx index 0a8ddec..5af412a 100644 --- a/frontend/src/components/Stream/ChatPanel.tsx +++ b/frontend/src/components/Stream/ChatPanel.tsx @@ -1,6 +1,6 @@ import React, { useState, useEffect, useRef } from "react"; import Input from "../Input/Input"; -import Button, { ToggleButton } from "../Input/Button"; +import Button from "../Input/Button"; import AuthModal from "../Auth/AuthModal"; import { useAuthModal } from "../../hooks/useAuthModal"; import { useAuth } from "../../context/AuthContext"; @@ -9,6 +9,7 @@ import { useChat } from "../../context/ChatContext"; import { ArrowLeftFromLineIcon, ArrowRightFromLineIcon, CrownIcon } from "lucide-react"; interface ChatMessage { + chatter_id: number; chatter_username: string; message: string; time_sent: string; @@ -189,7 +190,12 @@ const ChatPanel: React.FC = ({ streamId, onViewerCountChange }) {/* Message List */}
{messages.map((msg, index) => ( -
+
{/* User avatar with image */}
= ({ streamId, onViewerCountChange })
{/* Username */} (msg.chatter_username === username ? null : (window.location.href = `/user/${msg.chatter_username}`))} > diff --git a/frontend/src/pages/VideoPage.tsx b/frontend/src/pages/VideoPage.tsx index 411d77a..b40dee2 100644 --- a/frontend/src/pages/VideoPage.tsx +++ b/frontend/src/pages/VideoPage.tsx @@ -46,9 +46,6 @@ const VideoPage: React.FC = ({ streamerId }) => { }; }, [showCheckout]); - // Increment minutes of stream time every minute - useEffect; - useEffect(() => { // Fetch stream data for this streamer fetch(`/api/streams/${streamerId}/data`).then((res) => { @@ -157,9 +154,9 @@ const VideoPage: React.FC = ({ streamerId }) => { e.currentTarget.onerror = null; }} alt="streamer" - className="w-[3em] h-[3em] rounded-full border-[0.15em] border-purple-500 cursor-pointer" + className="w-[3em] h-[3em] rounded-full border-[0.15em] border-purple-500 object-cover cursor-pointer" onClick={() => navigate(`/user/${streamerName}`)} - style={{ backgroundColor: 'white' }} + style={{ backgroundColor: "white" }} />
{/* Streamer Info */} -
-
- {!isFollowing && username === streamerName ? ( - - ) : ( - - )} + {username != streamerName && ( +
+
+ {!isFollowing ? ( + + ) : ( + + )} +
-
+ )} {/* Stream Stats */}
@@ -212,21 +211,23 @@ const VideoPage: React.FC = ({ streamerId }) => {
{/* Subscribe Button */} -
- -
+ onClick={() => { + if (!isLoggedIn) { + setShowAuthModal(true); + } else if (isStripeReady) { + setShowCheckout(true); + } + }} + > + {isStripeReady ? "Subscribe" : "Loading..."} + +
+ )}
{showCheckout && ( Loading checkout...
}> diff --git a/web_server/blueprints/chat.py b/web_server/blueprints/chat.py index 57001aa..e1eeb42 100644 --- a/web_server/blueprints/chat.py +++ b/web_server/blueprints/chat.py @@ -76,9 +76,10 @@ def get_past_chat(stream_id: int): # fetched in format: [(username, message, time_sent, is_subscribed)] all_chats = db.fetchall(""" - SELECT username, message, time_sent, is_subscribed + SELECT user_id, username, message, time_sent, is_subscribed FROM ( SELECT + u.user_id, u.username, c.message, c.time_sent, @@ -95,11 +96,13 @@ def get_past_chat(stream_id: int): ) subquery ORDER BY time_sent ASC; """, (stream_id, stream_id)) + #! ASC - Oldest to Newest db.close_connection() # Create JSON output of chat_history to pass through NGINX proxy - chat_history = [{"chatter_username": chat["username"], + chat_history = [{"chatter_id": chat["user_id"], + "chatter_username": chat["username"], "message": chat["message"], "time_sent": chat["time_sent"], "is_subscribed": bool(chat["is_subscribed"])} for chat in all_chats] diff --git a/web_server/utils/recommendation_utils.py b/web_server/utils/recommendation_utils.py index a451940..e8418fa 100644 --- a/web_server/utils/recommendation_utils.py +++ b/web_server/utils/recommendation_utils.py @@ -100,7 +100,7 @@ def get_user_category_recommendations(user_id = 1, no_categories: int = 4) -> Op """ with Database() as db: categories = db.fetchall(""" - SELECT categories.category_id, categories.category_name + SELECT categories.category_id, categories.category_name, categories.num_viewers FROM categories JOIN user_preferences ON categories.category_id = user_preferences.category_id WHERE user_preferences.user_id = ?