From 8b6e4cc998f1f888373830b53b7233024f2ae929 Mon Sep 17 00:00:00 2001 From: Giorgio de Lodi Date: Sat, 21 Oct 2023 01:49:11 +0200 Subject: [PATCH 1/2] add changelog --- .gitignore | 3 +- CHANGELOG.md | 29 +++++++++ README.md | 3 + api/server.ts | 14 ++++ assets/images/badge.png | Bin 0 -> 573 bytes assets/images/popup.png | Bin 0 -> 27604 bytes chat/package.json | 2 +- chat/src/Components/Chat/Chat.tsx | 56 ++++++++++------ .../Components/ChatDivider/ChatDivider.tsx | 17 +++++ chat/src/Components/ChatDivider/index.ts | 1 + manifest.json | 10 ++- package.json | 10 +-- src/content/background.ts | 21 ++++++ src/content/index.ts | 60 ++++++++++++++++-- src/ui/chat-fusion.png | Bin 0 -> 69864 bytes src/ui/github-mark.svg | 1 + src/ui/popup.html | 42 ++++++++++++ 17 files changed, 239 insertions(+), 30 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 assets/images/badge.png create mode 100644 assets/images/popup.png create mode 100644 chat/src/Components/ChatDivider/ChatDivider.tsx create mode 100644 chat/src/Components/ChatDivider/index.ts create mode 100644 src/content/background.ts create mode 100644 src/ui/chat-fusion.png create mode 100644 src/ui/github-mark.svg create mode 100644 src/ui/popup.html diff --git a/.gitignore b/.gitignore index e86939e..24272d6 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ node_modules pnpm-lock.yaml .todo .env -messages.json \ No newline at end of file +messages.json +api/*.js \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..04b8366 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,29 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +## [Unreleased] + +### Added +- dev dependencie `cfx` in order to add the `copy-static` script in `package.json` +- a popup file in the chrome extension to permit the user to directly open the react page. Now the link it's hardcoded +

+ +

+ +- add a retry system to connect to the chat in `index.ts` in order to manage anomalies in case the component is loaded faster than the page +- add a `sessionId` generated each time there is a "reload" of the page so the webapp inserts a divider to let the streamer knows where the +chat session begins +- add `ChatDivider` component to let the user know when the chat has been reloaded +- add a footer on the chat that indicates if the autoreload is `on` or `off` +- add a badge on the extension in order to detect if it is connected to a chat + +

+ +

+ +### Changed +- `build` script in order to build the Chrome extension and copy all the relevant files in the ui folder + +### Notes +- the ChatDivider and the footer needs a graphical review but they are both working diff --git a/README.md b/README.md index 6e130fc..67c4b14 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,9 @@ By offering a consistent, user-friendly interface, Chat Fusion makes managing an ```bash pnpm i pnpm build # to build the chrome extension + +cd chat +pnpm i # to install the dependencies for the chat ``` You have to run the client (React) code and the API (fastify) separetly. diff --git a/api/server.ts b/api/server.ts index 665d128..8ab542a 100644 --- a/api/server.ts +++ b/api/server.ts @@ -7,6 +7,7 @@ import cors from "@fastify/cors"; import fs from "fs"; export interface IMessage { + sessionId: string; id: string; platform: string; content: string; @@ -28,12 +29,25 @@ server.post( "/api/messages", async (request: FastifyRequest, reply: FastifyReply) => { const message = request.body as IMessage; + if (messages.length > 0 && messages[messages.length - 1].sessionId !== message.sessionId) { + // new session, add system message + messages.push({ + sessionId: message.sessionId, + id: Math.random().toString(36).substr(2, 9), + platform: message.platform, + content: "Chat reload", + author: "System", + emojis: [], + badge: "", + }); + } messages.push(message); reply.code(201).send(); } ); server.get("/api/messages", async (_: FastifyRequest, reply: FastifyReply) => { + reply.send(messages); }); diff --git a/assets/images/badge.png b/assets/images/badge.png new file mode 100644 index 0000000000000000000000000000000000000000..8a51ec62d91aaaf8f0dee93d941699355bdae237 GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0vp^@<1%Z!3HE}TBS?}QjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjK*89|kcg7tyvzdM)RM%M#F9jy7z0DKQgTja zK|p?HUP-Z%Rdlsdg_4zlj#4F%tknVYj194IjVz$j5XC@lY;AnSUwfd-GCf@!Lp;2n zPTlW)*g@p@ela5sA@-vS0$O-ZKDx4Y^1HY9FC5%k@A&)=>&rJ26uraB=RSJ2sM*EQ zOQh4JS;=BWXnf7WLrcHtwH%X|=lFi_vF!cb)%xY$Z|}ad&RTRZS@(*Tp3Lrz>ynF; zMSI(B?NXb}`R<+kgdTZIBYDS#JqC`&8SA*3yd)pWT;2I}s+Plw%Ix&nx)ba6^WWZf zllhQA%lqGNY749ElCteCJ!(FvAT4|RyXHB)yiHQ||3fBZS)AT<;q})EDx5LbkCxgT3w_gy)@KO=eF*I!;FaO7oV%oV1VS*JgJ&)Vlvx7^}x%%(G^banm0mz`ny^m=Q@ hrMq#g|F=GD;D7nJ?p)>%#b8iGdb;|#taD0e0s!1+>=6I} literal 0 HcmV?d00001 diff --git a/assets/images/popup.png b/assets/images/popup.png new file mode 100644 index 0000000000000000000000000000000000000000..45fe7b5fab185dc061eca3f5ccfb3702f2ff752b GIT binary patch literal 27604 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�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 G^gjTM?TWhq literal 0 HcmV?d00001 diff --git a/chat/package.json b/chat/package.json index 606adbd..2d15f50 100644 --- a/chat/package.json +++ b/chat/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "VITE_STYLE_MODE=true vite", + "dev": "vite", "build": "tsc && vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" diff --git a/chat/src/Components/Chat/Chat.tsx b/chat/src/Components/Chat/Chat.tsx index 3e144b8..1bb79d0 100644 --- a/chat/src/Components/Chat/Chat.tsx +++ b/chat/src/Components/Chat/Chat.tsx @@ -1,7 +1,8 @@ -import { useEffect, useRef, FC } from "react"; +import { useEffect, useRef, FC, useState } from "react"; import { IMessage } from "../../types"; import { Message } from "../Message"; import classNames from "classnames"; +import { ChatDivider } from "../ChatDivider"; export const Chat: FC<{ messages: IMessage[]; @@ -9,7 +10,7 @@ export const Chat: FC<{ setFocusedMessage: (message: IMessage | null) => void; }> = ({ messages, focusedMessage, setFocusedMessage }) => { const messagesEndRef = useRef(null); - + const [autoReload, setAutoReload] = useState(true); const handleFocusMessage = (message: IMessage) => { setFocusedMessage(message.id === focusedMessage?.id ? null : message); }; @@ -20,28 +21,47 @@ export const Chat: FC<{ } }; - useEffect(() => { - scrollToBottom(); - }, [messages]); - - return ( -

-
- {messages.map((message: IMessage, index: number) => ( + const mapMessages = () => { + return messages.map((message: IMessage, index: number) => { + if (message.author.toLocaleLowerCase() === "system") { + return ( + + ); + } else { + return ( - ))} -
+ ); + } + }); + }; + + useEffect(() => { + if (autoReload) { + scrollToBottom(); + } + }, [messages, autoReload]); + + return ( + <> +
+ Autoreload { autoReload ? (ON) : (OFF)} +
+
+
+ {mapMessages()} +
+
-
+ ); }; diff --git a/chat/src/Components/ChatDivider/ChatDivider.tsx b/chat/src/Components/ChatDivider/ChatDivider.tsx new file mode 100644 index 0000000..a15f04f --- /dev/null +++ b/chat/src/Components/ChatDivider/ChatDivider.tsx @@ -0,0 +1,17 @@ +import { FC } from "react"; +import { IMessage } from "../../types"; + + +export const ChatDivider: FC<{ + message: IMessage; +}> = ({ message}) => { + const { platform } = message; + + return ( +
+ + Chat Reload on: {platform} + +
+ ); +}; diff --git a/chat/src/Components/ChatDivider/index.ts b/chat/src/Components/ChatDivider/index.ts new file mode 100644 index 0000000..f38cd58 --- /dev/null +++ b/chat/src/Components/ChatDivider/index.ts @@ -0,0 +1 @@ +export * from "./ChatDivider"; diff --git a/manifest.json b/manifest.json index 5e51637..f5141dd 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,11 @@ { "manifest_version": 3, "name": "Chat Fusion", + "description": "Chat Fusion for Streamers", + "action": { + "default_popup": "./dist/popup.html", + "default_title": "Chat Fusion" + }, "version": "1.0", "host_permissions": ["http://*/*", "https://*/*"], "content_scripts": [ @@ -8,5 +13,8 @@ "matches": ["http://*/*", "https://*/*"], "js": ["./dist/index.js"] } - ] + ], + "background": { + "service_worker": "./dist/background.js" + } } diff --git a/package.json b/package.json index 4447671..75fef21 100644 --- a/package.json +++ b/package.json @@ -3,15 +3,17 @@ "version": "1.0.0", "scripts": { "build:content": "tsc -p tsconfig.json", - "build": "npm run build:content", + "copy-static": "cpx src/ui/* dist", + "build": "npm run build:content && npm run copy-static", "build-server": "tsc --target ES2018 --module CommonJS --outDir ./api --strict --esModuleInterop api/server.ts", - "server-dev": "nodemon --watch 'api/server.ts' --exec 'tsc --target ES2018 --module CommonJS --outDir ./api --strict --esModuleInterop api/server.ts && node ./api/server.js'" + "server-dev": "nodemon --watch 'api/server.ts' --exec \"tsc --target ES2018 --module CommonJS --outDir ./api --strict --esModuleInterop api/server.ts && node ./api/server.js\"" }, "devDependencies": { "@types/chrome": "^0.0.248", "@types/node": "^20.8.7", - "typescript": "^5.2.2", - "nodemon": "^2.0.15" + "cpx": "^1.5.0", + "nodemon": "^2.0.15", + "typescript": "^5.2.2" }, "dependencies": { "@fastify/cors": "8.4.0", diff --git a/src/content/background.ts b/src/content/background.ts new file mode 100644 index 0000000..aa5b463 --- /dev/null +++ b/src/content/background.ts @@ -0,0 +1,21 @@ +let active = false; + + +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.type === "badge") { + setBadgeStatus(request.status); + sendResponse({status: active}); + } +}); + +const setBadgeStatus = (status: boolean) => { + if(status){ + chrome.action.setBadgeText({ text: " " }); + chrome.action.setBadgeTextColor({ color: "#FFFFFF" }); + chrome.action.setBadgeBackgroundColor({ color: "#00FF00" }); + }else{ + chrome.action.setBadgeText({ text: " " }); + chrome.action.setBadgeTextColor({ color: "#FFFFFF" }); + chrome.action.setBadgeBackgroundColor({ color: "#FF0000" }); + } +}; diff --git a/src/content/index.ts b/src/content/index.ts index 89fd0f9..5ed6a4d 100644 --- a/src/content/index.ts +++ b/src/content/index.ts @@ -6,6 +6,26 @@ interface ISelectorConfig { chatImageContainer: string; } +/** + * Utility used to generate a sessionId. + * @param {length} length - The length of the ID to generate. + * @returns the generated ID. + */ +function makeId(length: number): string { + let result = ""; + const characters = + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + const charactersLength = characters.length; + + for (let i = 0; i < length; i++) { + result += characters.charAt( + Math.floor(Math.random() * charactersLength) + ); + } + + return result; +} + /** * Retrieves the CSS selectors based on the hostname for a specific platform. * @param {string} hostname - The hostname of the website. @@ -61,6 +81,7 @@ const getPlatformNameByHostname = ( * Initializes the content script and sets up chat observers. */ const initContentScript = () => { + const sessionId = makeId(10); const hostname = window.location.hostname; const platform = getPlatformNameByHostname(hostname); const config = getSelectorsByPlatform(hostname); @@ -76,7 +97,6 @@ const initContentScript = () => { Array.from(mutation.addedNodes).forEach((chatNode) => { const isHTMLElement = chatNode instanceof Element; - const content = config.chatMessageContentSelector && isHTMLElement ? chatNode.querySelector(config.chatMessageContentSelector) @@ -112,6 +132,7 @@ const initContentScript = () => { : ""; const data = { + sessionId: sessionId, // id to identify the session of the chrome extension id: Math.random().toString(36).substr(2, 9), platform, content, @@ -134,11 +155,40 @@ const initContentScript = () => { }); }); }); + const setBadgeStatus = (status:boolean) => { + chrome.runtime.sendMessage({status: status, type: "badge"}, (response) => { + console.log('⚡[Chat Fusion] badge set'); + }); + + }; + const loadChat = () => { + const chatElement = document.querySelector(config.chatContainerSelector); + if (chatElement) { + chatObserver.observe(chatElement, { childList: true }); + return true; + }else{ + return false; + } + }; - const chatElement = document.querySelector(config.chatContainerSelector); - if (chatElement) { - chatObserver.observe(chatElement, { childList: true }); - } + + let retry = 0; + const interval = setInterval(() => { + if (retry > 3) { + clearInterval(interval); + console.error('⚠️[Chat Fusion] unable to connect to chat after 3 retries'); + setBadgeStatus(false); + + } + if(loadChat()){ + clearInterval(interval); + console.log('⚡[Chat Fusion] connected'); + setBadgeStatus(true); + } + retry++; + }, 1000); + + }; initContentScript(); diff --git a/src/ui/chat-fusion.png b/src/ui/chat-fusion.png new file mode 100644 index 0000000000000000000000000000000000000000..0df70e63aaded8f06101638cd10dc75d5be4841b GIT binary patch literal 69864 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 \ No newline at end of file diff --git a/src/ui/popup.html b/src/ui/popup.html new file mode 100644 index 0000000..04b5d6e --- /dev/null +++ b/src/ui/popup.html @@ -0,0 +1,42 @@ + + + + + + + Chat Fusion + + + +
+
+
+ Chat Fusion Logo +
+
+
+
+

Chat Fusion

+
+
+
+
+

Your Fusion Companion

+
+
+
+
+ +
+
+
+ +
+ GitHub Logo +
+
+
+ + \ No newline at end of file From 20f3906d3ccd02a3ee5b0835f94d47423d21c21d Mon Sep 17 00:00:00 2001 From: Giorgio de Lodi Date: Sat, 21 Oct 2023 01:57:41 +0200 Subject: [PATCH 2/2] typos --- CHANGELOG.md | 2 +- chat/src/Components/Chat/Chat.tsx | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 04b8366..99a9dfa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Added -- dev dependencie `cfx` in order to add the `copy-static` script in `package.json` +- dev dependency `cfx` in order to add the `copy-static` script in `package.json` - a popup file in the chrome extension to permit the user to directly open the react page. Now the link it's hardcoded

diff --git a/chat/src/Components/Chat/Chat.tsx b/chat/src/Components/Chat/Chat.tsx index 1bb79d0..da8484d 100644 --- a/chat/src/Components/Chat/Chat.tsx +++ b/chat/src/Components/Chat/Chat.tsx @@ -10,7 +10,7 @@ export const Chat: FC<{ setFocusedMessage: (message: IMessage | null) => void; }> = ({ messages, focusedMessage, setFocusedMessage }) => { const messagesEndRef = useRef(null); - const [autoReload, setAutoReload] = useState(true); + const [autoScroll, setAutoScroll] = useState(true); const handleFocusMessage = (message: IMessage) => { setFocusedMessage(message.id === focusedMessage?.id ? null : message); }; @@ -41,15 +41,15 @@ export const Chat: FC<{ }; useEffect(() => { - if (autoReload) { + if (autoScroll) { scrollToBottom(); } - }, [messages, autoReload]); + }, [messages, autoScroll]); return ( <>

- Autoreload { autoReload ? (ON) : (OFF)} + Autoreload { autoScroll ? (ON) : (OFF)}