matrix-art

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

commit aa45a94f3de300930329e87b6607cbfc2d23de10
parent fb78a241871e4524db36e7d6c09852e822330551
Author: MTRNord <mtrnord1@gmail.com>
Date:   Sat,  5 Feb 2022 20:33:06 +0100

Fix last fix and kinda make sure to reduce amount of guest registrations

Diffstat:
Mcomponents/ClientContext.tsx | 2+-
Mcomponents/FrontPageImage.tsx | 9++++++++-
Mhelpers/storage.ts | 9++++++++-
Mpages/_app.tsx | 11+++++------
Mpages/index.tsx | 2++
Mpages/post/[id].tsx | 1+
Mpages/profile/[userid].tsx | 1+
7 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/components/ClientContext.tsx b/components/ClientContext.tsx @@ -7,6 +7,6 @@ const client = new Client(new Storage("main")); // 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 }); +const ClientContext: Context<{ client: Client; guest_client: Client; is_generating_guest: boolean; }> = React.createContext<{ client: Client; guest_client: Client; is_generating_guest: boolean; }>({ client: client, guest_client: guest_client, is_generating_guest: false }); export { ClientContext, client, guest_client }; \ No newline at end of file diff --git a/components/FrontPageImage.tsx b/components/FrontPageImage.tsx @@ -49,7 +49,7 @@ export default class FrontPageImage extends PureComponent<Props, State> { async componentDidMount() { // auto-register as a guest if not logged in if (!this.context.client?.accessToken) { - this.registerAsGuest(); + this.registerAsGuest();; } else { console.log("Already logged in"); if (!this.props.event) { @@ -68,9 +68,15 @@ export default class FrontPageImage extends PureComponent<Props, State> { } async registerAsGuest() { + console.log(this.context.is_generating_guest); + if (this.context.is_generating_guest) { + return; + } + this.context.is_generating_guest = true; try { let serverUrl = constMatrixArtServer + "/_matrix/client"; await this.context.client?.registerAsGuest(serverUrl); + this.context.is_generating_guest = false; if (typeof window !== "undefined") { window.location.reload(); } @@ -80,6 +86,7 @@ export default class FrontPageImage extends PureComponent<Props, State> { error: "Failed to register as guest: " + JSON.stringify(error), }); } + this.context.is_generating_guest = false; } render() { diff --git a/helpers/storage.ts b/helpers/storage.ts @@ -16,7 +16,14 @@ export default class Storage { } this.nodeLocalStorage = new LocalStorage(dir); } - if (this.getItem("version") === undefined || this.getItem("version") !== STORAGE_VERSION.toString()) { + let version; + if (typeof window !== "undefined") { + version = window.localStorage.getItem("version"); + } else { + version = this.nodeLocalStorage?.getItem("version"); + } + console.log("storage_version:", version); + if (version === undefined || version === null || version !== STORAGE_VERSION.toString()) { if (typeof window !== "undefined") { window.localStorage.clear(); window.localStorage.setItem("version", STORAGE_VERSION.toString()); diff --git a/pages/_app.tsx b/pages/_app.tsx @@ -1,7 +1,6 @@ import '../styles/globals.css'; import 'react-toastify/dist/ReactToastify.min.css'; import type { AppProps } from 'next/app'; -import { useState } from 'react'; import { client, ClientContext, guest_client } from '../components/ClientContext'; import React from 'react'; import Head from 'next/head'; @@ -9,10 +8,6 @@ import { ToastContainer } from 'react-toastify'; import { appWithTranslation } from 'next-i18next'; function MyApp({ Component, pageProps }: AppProps) { - const [value] = useState({ - client: client, - guest_client: guest_client, - }); return ( <> <Head> @@ -23,7 +18,11 @@ function MyApp({ Component, pageProps }: AppProps) { </Head> <React.StrictMode> <ClientContext.Provider - value={value} + value={{ + client: client, + guest_client: guest_client, + is_generating_guest: false, + }} > <Component {...pageProps} /> </ClientContext.Provider> diff --git a/pages/index.tsx b/pages/index.tsx @@ -136,6 +136,7 @@ export const getServerSideProps: GetServerSideProps = async ({ res, locale }) => if (!client?.accessToken) { try { let serverUrl = constMatrixArtServer + "/_matrix/client"; + console.log(1); await client?.registerAsGuest(serverUrl); } catch (error) { console.error("Failed to register as guest:", error); @@ -157,6 +158,7 @@ export const getServerSideProps: GetServerSideProps = async ({ res, locale }) => roomId = await client?.followUser(user.public_user_room); } catch { console.error("Unbable to join room"); + continue; } const events = await client?.getTimeline(roomId, 100); // Filter events by type diff --git a/pages/post/[id].tsx b/pages/post/[id].tsx @@ -105,6 +105,7 @@ class Post extends PureComponent<Props, State> { roomId = await client?.followUser(user.public_user_room); } catch { console.error("Unbable to join room"); + continue; } const events = await client?.getTimeline(roomId, 100); // Filter events by type const image_event = events.find((event) => (event.type === "m.image_gallery" || event.type === "m.image") && event.event_id === event_id); diff --git a/pages/profile/[userid].tsx b/pages/profile/[userid].tsx @@ -128,6 +128,7 @@ class Profile extends PureComponent<Props, State> { roomId = await client?.followUser("#" + this.props.mxid); } catch { console.error("Unbable to join room"); + return; } const events = await client?.getTimeline(roomId, 100, { limit: 30, types: ["m.image", "m.image_gallery", "matrixart.profile", "matrixart.profile_banner"] }); const profile_event = events.find((event) => event.type === "matrixart.profile" && event.sender === this.props.mxid);