matrix-art

An image gallery for Matrix
git clone git://archive.git.mtrnord.blog/MTRNord/matrix-art.git
Log | Files | Refs | README | LICENSE

commit e3c4969e3abde903bd88f0c2dd900a6fdbdba414
parent e5820fb773250f3499f5b50298b61d0252505f7f
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sun,  2 Jan 2022 00:33:22 +0100

Make sure to not excessively join rooms if logged in

Diffstat:
Mcomponents/ClientContext.tsx | 12++++++++----
Me2e/auth.json | 8++++----
Mhelpers/storage.ts | 16+++++++++-------
Mpages/Home.tsx | 5+++--
Mpages/index.tsx | 3++-
5 files changed, 26 insertions(+), 18 deletions(-)

diff --git a/components/ClientContext.tsx b/components/ClientContext.tsx @@ -2,7 +2,11 @@ import React, { Context } from "react"; import Client from "../helpers/matrix_client"; import Storage from "../helpers/storage"; -const client = new Client(new Storage()); -const ClientContext: Context<{ client: Client; }> = React.createContext<{ client: Client; }>({ client: client }); +// Actual user client +const client = new Client(new Storage("main")); -export { ClientContext, client }; -\ No newline at end of file +// Client used if logged in for the Homepage to prevent excessive room joining +const guest_client = new Client(new Storage("guest")); +const ClientContext: Context<{ client: Client; guest_client: Client; }> = React.createContext<{ client: Client; guest_client: Client; }>({ client: client, guest_client: guest_client }); + +export { ClientContext, client, guest_client }; +\ No newline at end of file diff --git a/e2e/auth.json b/e2e/auth.json @@ -5,19 +5,19 @@ "origin": "http://localhost:3000", "localStorage": [ { - "name": "accessToken", + "name": "main_accessToken", "value": "syt_bWF0cml4X2FydF9ndWVzdF8xNjQxMDQ3ODI1NDkz_sHzGkEbUPwgafJZCVqDE_2LrWnQ" }, { - "name": "serverName", + "name": "main_serverName", "value": "art.midnightthoughts.space" }, { - "name": "userId", + "name": "main_userId", "value": "@matrix_art_guest_1641047825493:art.midnightthoughts.space" }, { - "name": "serverUrl", + "name": "main_serverUrl", "value": "https://matrix.art.midnightthoughts.space/_matrix/client" } ] diff --git a/helpers/storage.ts b/helpers/storage.ts @@ -1,6 +1,8 @@ export default class Storage { + private prefix; private nodeLocalStorage?; - constructor() { + constructor(prefix: string) { + this.prefix = prefix; if (typeof window === "undefined") { var LocalStorage = require('node-localstorage').LocalStorage; var path = require('path'); @@ -9,25 +11,25 @@ export default class Storage { } getItem(key: string): any { if (typeof window !== "undefined") { - return window.localStorage.getItem(key); + return window.localStorage.getItem(this.prefix + key); } else { - return this.nodeLocalStorage?.getItem(key); + return this.nodeLocalStorage?.getItem(this.prefix + key); } } setItem(key: string, value: any): any { if (typeof window !== "undefined") { - return window.localStorage.setItem(key, value); + return window.localStorage.setItem(this.prefix + key, value); } else { - return this.nodeLocalStorage?.setItem(key, value); + return this.nodeLocalStorage?.setItem(this.prefix + key, value); } } removeItem(key: string): any { if (typeof window !== "undefined") { - return window.localStorage.removeItem(key); + return window.localStorage.removeItem(this.prefix + key); } else { - return this.nodeLocalStorage?.removeItem(key); + return this.nodeLocalStorage?.removeItem(this.prefix + key); } } diff --git a/pages/Home.tsx b/pages/Home.tsx @@ -85,14 +85,15 @@ export default class Home extends Component<Props, State>{ if (!directoryIsLoaded || isLoadingImages || hasFullyLoaded) { return; } + const client = this.context.client.isGuest ? this.context.client : this.context.guest_client; this.setState({ isLoadingImages: true, }); try { for (let user of directory_data) { // We dont need many events - const roomId = await this.context.client?.followUser(user.user_room); - await this.context.client?.getTimeline(roomId, 100, (events) => { + const roomId = await client?.followUser(user.user_room); + await client?.getTimeline(roomId, 100, (events) => { // Filter events by type const image_events = events.filter((event) => event.type == "m.image_gallery" || event.type == "m.image"); console.log("Adding ", image_events.length, " items"); diff --git a/pages/index.tsx b/pages/index.tsx @@ -1,7 +1,7 @@ import type { NextPage } from 'next'; import Head from 'next/head'; import React from 'react'; -import { client, ClientContext } from '../components/ClientContext'; +import { guest_client, client, ClientContext } from '../components/ClientContext'; import Home from './Home'; const App: NextPage = () => { @@ -17,6 +17,7 @@ const App: NextPage = () => { <ClientContext.Provider value={{ client: client, + guest_client: guest_client, }} > <Home />