From f17fbaff49d84e6ed4e120df2d14a26b10001f45 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 7 Feb 2025 21:44:54 +1300 Subject: [PATCH 01/15] Add event-stream route --- server/app.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index 4dec6b4c4..f586b760c 100644 --- a/server/app.js +++ b/server/app.js @@ -37,6 +37,8 @@ import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import forceSSL from './forcessl.mw.js'; +import EventEmitter from 'events'; + const sanitizeBrew = (brew, accessType)=>{ brew._id = undefined; @@ -352,7 +354,7 @@ app.get('/user/:username', async (req, res, next)=>{ app.put('/api/user/rename', async (req, res)=>{ const { username, newUsername } = req.body; const ownAccount = req.account && (req.account.username == newUsername); - + if(!username || !newUsername) return res.status(400).json({ error: 'Username and newUsername are required.' }); if(!ownAccount) @@ -512,6 +514,27 @@ app.get('/account', asyncHandler(async (req, res, next)=>{ return next(); })); +// Event Stream +const Stream = new EventEmitter; + +// After Stream starts, send initStream event +setTimeout(()=>{ + Stream.emit('push', 'initStream', { time: (new Date).toString() }); +}, 1000); + +app.get('/stream', (req, res)=>{ + res.writeHead(200, { + 'Content-Type' : 'text/event-stream', + 'Cache-Control' : 'no-cache', + 'Connection' : 'keep-alive' + }); + + Stream.on('push', (event, data)=>{ + // console.log('Event:', event, 'Data:', data); + res.write(`data: ${JSON.stringify({ ...data, eventType: event })}\n\n`); + }); +}); + // Local only if(isLocalEnvironment){ // Login From 4669c5d48922a5adf7cd7e91b3b327ac5fcdd745 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 7 Feb 2025 21:45:27 +1300 Subject: [PATCH 02/15] Add reload when initStream message is received --- client/homebrew/homebrew.jsx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 415390498..b8e8aa474 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -66,6 +66,18 @@ const Homebrew = createClass({ return {}; }, + componentDidMount : function(){ + const eventSource = new EventSource('/stream'); + + eventSource.addEventListener('message', (evt)=>{ + const messageData = JSON.parse(evt.data); + + if(messageData.eventType == 'initStream'){ + window.location.reload(); + } + }); + }, + render : function (){ return ( From 0a6434fbf347ef9284caf212cf123953ebb3158f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Fri, 7 Feb 2025 21:46:28 +1300 Subject: [PATCH 03/15] Increase max-lines on app.js --- server/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index f586b760c..11a109843 100644 --- a/server/app.js +++ b/server/app.js @@ -1,4 +1,4 @@ -/*eslint max-lines: ["warn", {"max": 500, "skipBlankLines": true, "skipComments": true}]*/ +/*eslint max-lines: ["warn", {"max": 750, "skipBlankLines": true, "skipComments": true}]*/ // Set working directory to project root import { dirname } from 'path'; import { fileURLToPath } from 'url'; From 4ce1cf5eece6fd13a3e7a16ee3fa175870775d1f Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 11 Feb 2025 09:58:00 +1300 Subject: [PATCH 04/15] Move EventStream to external module --- server/app.js | 28 ++++++++++++++-------------- server/eventStreamSource.js | 9 +++++++++ 2 files changed, 23 insertions(+), 14 deletions(-) create mode 100644 server/eventStreamSource.js diff --git a/server/app.js b/server/app.js index 11a109843..e06fda2a5 100644 --- a/server/app.js +++ b/server/app.js @@ -37,7 +37,7 @@ import bodyParser from 'body-parser'; import cookieParser from 'cookie-parser'; import forceSSL from './forcessl.mw.js'; -import EventEmitter from 'events'; +import Stream from './eventStreamSource.js'; const sanitizeBrew = (brew, accessType)=>{ @@ -514,27 +514,27 @@ app.get('/account', asyncHandler(async (req, res, next)=>{ return next(); })); -// Event Stream -const Stream = new EventEmitter; - -// After Stream starts, send initStream event -setTimeout(()=>{ - Stream.emit('push', 'initStream', { time: (new Date).toString() }); -}, 1000); - +// Create Event Stream source for pages to listen to app.get('/stream', (req, res)=>{ res.writeHead(200, { - 'Content-Type' : 'text/event-stream', - 'Cache-Control' : 'no-cache', - 'Connection' : 'keep-alive' + 'Content-Type' : 'text/event-stream', + 'Cache-Control' : 'no-cache', + 'Connection' : 'keep-alive', + 'Content-Encoding' : 'none' }); - Stream.on('push', (event, data)=>{ - // console.log('Event:', event, 'Data:', data); + Stream.on('sendUpdate', (event, data)=>{ + console.log('Event:', event, '\nData:', data); res.write(`data: ${JSON.stringify({ ...data, eventType: event })}\n\n`); }); }); +// After Stream starts, send initStream event +setTimeout(()=>{ + Stream.emit('sendUpdate', 'initStream', { time: new Date }); +}, 1000); + + // Local only if(isLocalEnvironment){ // Login diff --git a/server/eventStreamSource.js b/server/eventStreamSource.js new file mode 100644 index 000000000..66fdb3354 --- /dev/null +++ b/server/eventStreamSource.js @@ -0,0 +1,9 @@ +import { EventEmitter } from 'events'; + +const Stream = new EventEmitter; + +export default { + emit : function(event) {return Stream.emit(event, ...([...arguments].slice(1)));}, // Arguments doesn't work for arrow functions + on : (event, listener)=>{return Stream.on(event, listener);}, + off : (event, listener)=>{return Stream.off(event, listener);} +}; \ No newline at end of file From 97ebdf7ae679e86b6881e36027a7aa031cb843d1 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Tue, 11 Feb 2025 09:59:14 +1300 Subject: [PATCH 05/15] Add brew update detection to Share Page --- client/homebrew/pages/sharePage/sharePage.jsx | 12 ++++++++++++ server/homebrew.api.js | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index e9c5540a2..a3fdcdf34 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -46,6 +46,18 @@ const SharePage = (props)=>{ brew.theme ); + const eventSource = new EventSource('/stream'); + + eventSource.addEventListener('message', (evt)=>{ + const messageData = JSON.parse(evt.data); + + if(messageData.eventType == 'brewUpdated'){ + if(messageData.shareId == brew.shareId && messageData.version != brew.version) { + console.log(`brew has been updated, viewing ${brew.version}, new version is ${messageData.version}`); + } + } + }); + return ()=>{ document.removeEventListener('keydown', handleControlKeys); }; diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 9a479732e..57815e384 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -16,6 +16,8 @@ const router = express.Router(); import { DEFAULT_BREW, DEFAULT_BREW_LOAD } from './brewDefaults.js'; import Themes from '../themes/themes.json' with { type: 'json' }; +import Stream from './eventStreamSource.js'; + const isStaticTheme = (renderer, themeName)=>{ return Themes[renderer]?.[themeName] !== undefined; }; @@ -398,6 +400,8 @@ const api = { const after = await afterSave(); if(!after) return; + Stream.emit('sendUpdate', 'brewUpdated', { time: new Date, shareId: brew.shareId, version: brew.version }); + res.status(200).send(saved); }, deleteGoogleBrew : async (account, id, editId, res)=>{ From dafec31632065a735db323c3ab3405a80f88cf41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Mon, 14 Sep 2026 16:10:47 +0200 Subject: [PATCH 06/15] basic fix --- server/homebrew.api.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 4cca76193..3e3554b66 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -168,8 +168,7 @@ const api = { const googleBrew = await GoogleActions.getGoogleBrew(oAuth2Client, googleId, id, accessType) .catch((googleError)=>{ - const reason = googleError.errors?.[0].reason; - if(reason == 'notFound') + if(googleError.code === 404 || googleError.status === 404) throw { ...googleError, HBErrorCode: '02', authors: stub?.authors, account: req.account?.username }; else throw { ...googleError, HBErrorCode: '01' }; From 3e068129bbcd5bd0f9684f1e760e92b6ba6eecb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= Date: Wed, 16 Sep 2026 12:26:39 +0200 Subject: [PATCH 07/15] sum of all changes --- client/homebrew/navbar/navbar.jsx | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) diff --git a/client/homebrew/navbar/navbar.jsx b/client/homebrew/navbar/navbar.jsx index 40e5aef71..c55672d15 100644 --- a/client/homebrew/navbar/navbar.jsx +++ b/client/homebrew/navbar/navbar.jsx @@ -1,34 +1,28 @@ import './navbar.less'; import React from 'react'; -import createReactClass from 'create-react-class'; import Nav from './nav.jsx'; import PatreonNavItem from './patreon.navitem.jsx'; -const Navbar = createReactClass({ - displayName : 'Navbar', - getInitialState : function() { - return { - ver : global.version || '0.0.0' - }; - }, +const Navbar = ({ children })=>{ + const version = global.version || '0.0.0'; - render : function(){ - return + return ( +
The Homebrewery
- {`v${this.state.ver}`} + {`v${version}`} - {/*this.renderChromeWarning()*/} + {/* this.renderChromeWarning() */}
- {this.props.children} -
; - } -}); + {children} +
+ ); +}; -export default Navbar; +export default Navbar; \ No newline at end of file From 7a9e561742754e3325b579737404a8377e2013a8 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Sep 2026 10:06:48 -0400 Subject: [PATCH 08/15] Change visiblePages and centerPage to separate states Allows small logic cleanup in handlePageVisibilityChange --- client/homebrew/brewRenderer/brewRenderer.jsx | 29 +++++++++---------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 65de45177..577d683f8 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -111,11 +111,12 @@ const BrewRenderer = (props)=>{ ...props }; + const [visiblePages, setVisiblePages] = useState([]); + const [centerPage , setCenterPage ] = useState(1); + const [state, setState] = useState({ isMounted : false, - visibility : 'hidden', - visiblePages : [], - centerPage : 1 + visibility : 'hidden' }); const [displayOptions, setDisplayOptions] = useState({ @@ -145,21 +146,17 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(PAGEBREAK_REGEX_V3); } - const handlePageVisibilityChange = (pageNum, isVisible, isCenter)=>{ - setState((prevState)=>{ - const updatedVisiblePages = new Set(prevState.visiblePages); - if(!isCenter) - isVisible ? updatedVisiblePages.add(pageNum) : updatedVisiblePages.delete(pageNum); - - return { - ...prevState, - visiblePages : [...updatedVisiblePages].sort((a, b)=>a - b), - centerPage : isCenter ? pageNum : prevState.centerPage - }; + const handlePageVisibilityChange = (pageNum, isVisible, isCenter) => { + setVisiblePages(prev => { + const updatedVisiblePages = new Set(prev); + isVisible ? updatedVisiblePages.add(pageNum) : updatedVisiblePages.delete(pageNum); + return [...updatedVisiblePages].sort((a, b) => a - b); }); - if(isCenter) + if (isCenter) { + setCenterPage(pageNum); props.onPageChange(pageNum); + } }; const isInView = (index)=>{ @@ -346,7 +343,7 @@ const BrewRenderer = (props)=>{ - 0 ? state.visiblePages : [state.centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/> + 0 ? visiblePages : [centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/> {/*render in iFrame so broken code doesn't crash the site.*/} Date: Fri, 18 Sep 2026 10:26:24 -0400 Subject: [PATCH 09/15] Remove unused brewRenderer props --- client/homebrew/brewRenderer/brewRenderer.jsx | 4 ---- client/homebrew/pages/editPage/editPage.jsx | 2 -- client/homebrew/pages/homePage/homePage.jsx | 3 +-- client/homebrew/pages/newPage/newPage.jsx | 2 -- 4 files changed, 1 insertion(+), 10 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 577d683f8..0f02a50b4 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -23,7 +23,6 @@ import safeHTML from './safeHTML.js'; const PAGEBREAK_REGEX_V3 = /^(?=\\page(?:break)?(?: *{[^\n{}]*})?$)/m; const PAGEBREAK_REGEX_LEGACY = /\\page(?:break)?/m; const COLUMNBREAK_REGEX_LEGACY = /\\column(:?break)?/m; -const PAGE_HEIGHT = 1056; const TOOLBAR_STATE_KEY = 'HB_renderer_toolbarState'; @@ -100,11 +99,9 @@ const BrewRenderer = (props)=>{ text : '', style : '', renderer : 'legacy', - theme : '5ePHB', lang : '', errors : [], currentEditorCursorPageNum : 1, - currentEditorViewPageNum : 1, currentBrewRendererPageNum : 1, themeBundle : {}, onPageChange : ()=>{}, @@ -138,7 +135,6 @@ const BrewRenderer = (props)=>{ const mainRef = useRef(null); const pagesRef = useRef(null); - const urlRef = useRef(''); if(props.renderer == 'legacy') { rawPages = props.text.split(PAGEBREAK_REGEX_LEGACY); diff --git a/client/homebrew/pages/editPage/editPage.jsx b/client/homebrew/pages/editPage/editPage.jsx index 205cf3fcb..57667ca6e 100644 --- a/client/homebrew/pages/editPage/editPage.jsx +++ b/client/homebrew/pages/editPage/editPage.jsx @@ -289,12 +289,10 @@ const EditPage = (props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} - theme={currentBrew.theme} themeBundle={themeBundle} errors={HTMLErrors} lang={currentBrew.lang} onPageChange={setCurrentBrewRendererPageNum} - currentEditorViewPageNum={currentEditorViewPageNum} currentEditorCursorPageNum={currentEditorCursorPageNum} currentBrewRendererPageNum={currentBrewRendererPageNum} allowPrint={true} diff --git a/client/homebrew/pages/homePage/homePage.jsx b/client/homebrew/pages/homePage/homePage.jsx index 0132a1147..0ac78f0e1 100644 --- a/client/homebrew/pages/homePage/homePage.jsx +++ b/client/homebrew/pages/homePage/homePage.jsx @@ -138,11 +138,10 @@ const HomePage =(props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} + themeBundle={themeBundle} onPageChange={setCurrentBrewRendererPageNum} - currentEditorViewPageNum={currentEditorViewPageNum} currentEditorCursorPageNum={currentEditorCursorPageNum} currentBrewRendererPageNum={currentBrewRendererPageNum} - themeBundle={themeBundle} /> diff --git a/client/homebrew/pages/newPage/newPage.jsx b/client/homebrew/pages/newPage/newPage.jsx index 48d589c1e..c7b6c7160 100644 --- a/client/homebrew/pages/newPage/newPage.jsx +++ b/client/homebrew/pages/newPage/newPage.jsx @@ -183,12 +183,10 @@ const NewPage = (props)=>{ text={currentBrew.text} style={currentBrew.style} renderer={currentBrew.renderer} - theme={currentBrew.theme} themeBundle={themeBundle} errors={HTMLErrors} lang={currentBrew.lang} onPageChange={setCurrentBrewRendererPageNum} - currentEditorViewPageNum={currentEditorViewPageNum} currentEditorCursorPageNum={currentEditorCursorPageNum} currentBrewRendererPageNum={currentBrewRendererPageNum} allowPrint={true} From 0b6702c1988c2d383cad8fc50c5437829603f649 Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Sep 2026 10:35:21 -0400 Subject: [PATCH 10/15] [brewRenderer] Remove mainRef; it does nothing --- client/homebrew/brewRenderer/brewRenderer.jsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 0f02a50b4..6776389c1 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -133,7 +133,6 @@ const BrewRenderer = (props)=>{ const [headerState, setHeaderState] = useState(false); - const mainRef = useRef(null); const pagesRef = useRef(null); if(props.renderer == 'legacy') { @@ -334,7 +333,7 @@ const BrewRenderer = (props)=>{ : null} -
+
From 90c42dc51d3a445fd074779fc96d49615eaca3ac Mon Sep 17 00:00:00 2001 From: Trevor Buckner Date: Fri, 18 Sep 2026 11:17:36 -0400 Subject: [PATCH 11/15] Linting --- client/homebrew/brewRenderer/brewRenderer.jsx | 44 ++++++++----------- 1 file changed, 19 insertions(+), 25 deletions(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index 6776389c1..b198fa615 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -46,31 +46,25 @@ const BrewPage = (props)=>{ }; const pageRef = useRef(null); const cleanText = safeHTML(props.contents); + const pageNum = props.index + 1; useEffect(()=>{ if(!pageRef.current) return; - // Observer for tracking pages within the `.pages` div + // Observer for tracking which pages are at least 30% visible in the iframe const visibleObserver = new IntersectionObserver( - (entries)=>{ - entries.forEach((entry)=>{ - if(entry.isIntersecting) - props.onVisibilityChange(props.index + 1, true, false); // add page to array of visible pages. - else - props.onVisibilityChange(props.index + 1, false, false); - }); - }, + (entries)=>entries.forEach((entry)=>{ + props.onVisibilityChange(pageNum, entry.isIntersecting, false); // add page to array of visible pages. + }), { threshold: .3, rootMargin: '0px 0px 0px 0px' } // detect when >30% of page is within bounds. ); // Observer for tracking the page at the center of the iframe. const centerObserver = new IntersectionObserver( - (entries)=>{ - entries.forEach((entry)=>{ - if(entry.isIntersecting) - props.onVisibilityChange(props.index + 1, true, true); // Set this page as the center page - }); - }, + (entries)=>entries.forEach((entry)=>{ + if(entry.isIntersecting) + props.onVisibilityChange(pageNum, true, true); // Set this page as the center page + }), { threshold: 0, rootMargin: '-50% 0px -50% 0px' } // Detect when the page is at the center ); @@ -91,7 +85,7 @@ const BrewPage = (props)=>{ //v=====--------------------< Brew Renderer Component >-------------------=====v// let renderedPages = []; -let pageTemplates = []; +const pageTemplates = []; let rawPages = []; const BrewRenderer = (props)=>{ @@ -109,11 +103,11 @@ const BrewRenderer = (props)=>{ }; const [visiblePages, setVisiblePages] = useState([]); - const [centerPage , setCenterPage ] = useState(1); + const [centerPage, setCenterPage] = useState(1); const [state, setState] = useState({ - isMounted : false, - visibility : 'hidden' + isMounted : false, + visibility : 'hidden' }); const [displayOptions, setDisplayOptions] = useState({ @@ -141,14 +135,14 @@ const BrewRenderer = (props)=>{ rawPages = props.text.split(PAGEBREAK_REGEX_V3); } - const handlePageVisibilityChange = (pageNum, isVisible, isCenter) => { - setVisiblePages(prev => { + const handlePageVisibilityChange = (pageNum, isVisible, isCenter)=>{ + setVisiblePages((prev)=>{ const updatedVisiblePages = new Set(prev); isVisible ? updatedVisiblePages.add(pageNum) : updatedVisiblePages.delete(pageNum); - return [...updatedVisiblePages].sort((a, b) => a - b); + return [...updatedVisiblePages].sort((a, b)=>a - b); }); - if (isCenter) { + if(isCenter) { setCenterPage(pageNum); props.onPageChange(pageNum); } @@ -341,11 +335,11 @@ const BrewRenderer = (props)=>{ 0 ? visiblePages : [centerPage]} totalPages={rawPages.length} headerState={headerState} setHeaderState={setHeaderState}/> {/*render in iFrame so broken code doesn't crash the site.*/} - {emitClick();}} - sandbox="allow-same-origin allow-modals allow-top-navigation" + sandbox='allow-same-origin allow-modals allow-top-navigation' >
Date: Fri, 18 Sep 2026 11:24:39 -0400 Subject: [PATCH 12/15] Update brewRenderer.jsx --- client/homebrew/brewRenderer/brewRenderer.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/brewRenderer/brewRenderer.jsx b/client/homebrew/brewRenderer/brewRenderer.jsx index b198fa615..75a07c7d1 100644 --- a/client/homebrew/brewRenderer/brewRenderer.jsx +++ b/client/homebrew/brewRenderer/brewRenderer.jsx @@ -103,7 +103,7 @@ const BrewRenderer = (props)=>{ }; const [visiblePages, setVisiblePages] = useState([]); - const [centerPage, setCenterPage] = useState(1); + const [centerPage , setCenterPage ] = useState(1); const [state, setState] = useState({ isMounted : false, From 2723f3e96f4b5464d15f504d33caa8e1a959de25 Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Sun, 20 Sep 2026 15:48:29 +1200 Subject: [PATCH 13/15] Remove live reload functionality --- client/homebrew/homebrew.jsx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index a9165a00f..716291764 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -1,6 +1,5 @@ import 'core-js/es/string/to-well-formed.js'; // Polyfill for older browsers import './homebrew.less'; -import React, { useEffect } from 'react'; import { BrowserRouter as Router, Routes, Route, useParams, useSearchParams } from 'react-router'; import { updateLocalStorage } from './utils/updateLocalStorage/updateLocalStorageKeys.js'; @@ -46,18 +45,6 @@ const Homebrew = (props)=>{ global.config = config; global.enablev4 = enablev4; - useEffect(()=>{ - const eventSource = new EventSource('/stream'); - - eventSource.addEventListener('message', (evt)=>{ - const messageData = JSON.parse(evt.data); - - if(messageData.eventType == 'initStream'){ - console.log('window.location.reload()'); - } - }); - }, []); - const backgroundObject = ()=>{ if(config?.deployment || (config?.local && config?.development)) { const bgText = config?.deployment || 'Local'; From 84b47b37e23c254c62f982980d4ccae9c38af60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= <5ecleric.naturalcrit@gmail.com> Date: Sun, 20 Sep 2026 20:31:18 +0200 Subject: [PATCH 14/15] Update client/homebrew/pages/sharePage/sharePage.jsx --- client/homebrew/pages/sharePage/sharePage.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/homebrew/pages/sharePage/sharePage.jsx b/client/homebrew/pages/sharePage/sharePage.jsx index 7d662fb9a..d81b4d878 100644 --- a/client/homebrew/pages/sharePage/sharePage.jsx +++ b/client/homebrew/pages/sharePage/sharePage.jsx @@ -39,8 +39,8 @@ const SharePage = (props)=>{ document.addEventListener('keydown', handleControlKeys); fetchThemeBundle(undefined, setThemeBundle, brew.renderer, brew.theme); + // listen for changes in the brew version const eventSource = new EventSource('/stream'); - eventSource.addEventListener('message', (evt)=>{ const messageData = JSON.parse(evt.data); From dfe8ebfe1bb1299399c35855d516e59674566d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Losada=20Hern=C3=A1ndez?= <5ecleric.naturalcrit@gmail.com> Date: Sun, 20 Sep 2026 20:32:29 +0200 Subject: [PATCH 15/15] Update server/app.js --- server/app.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/app.js b/server/app.js index 06efbe7db..714c4beba 100644 --- a/server/app.js +++ b/server/app.js @@ -1,4 +1,4 @@ -/*eslint max-lines: ["warn", {"max": 750, "skipBlankLines": true, "skipComments": true}]*/ +/*eslint max-lines: ["warn", {"max": 400, "skipBlankLines": true, "skipComments": true}]*/ // Set working directory to project root import { dirname } from 'path'; import { fileURLToPath } from 'url';