Skip to content
This repository was archived by the owner on Sep 11, 2024. It is now read-only.

Commit 22b7081

Browse files
authored
Merge pull request #5803 from matrix-org/travis/s-sso-login-crash
Fix crash on login when using social login
2 parents ce19d07 + 8bc2356 commit 22b7081

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

src/components/views/elements/SSOButtons.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ const SSOButton: React.FC<ISSOButtonProps> = ({
7373
brandClass = `mx_SSOButton_brand_${brandName}`;
7474
icon = <img src={brandIcon} height="24" width="24" alt={brandName} />;
7575
} else if (typeof idp?.icon === "string" && idp.icon.startsWith("mxc://")) {
76-
const src = mediaFromMxc(idp.icon).getSquareThumbnailHttp(24);
76+
const src = mediaFromMxc(idp.icon, matrixClient).getSquareThumbnailHttp(24);
7777
icon = <img src={src} height="24" width="24" alt={idp.name} />;
7878
}
7979

src/customisations/Media.ts

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import {MatrixClientPeg} from "../MatrixClientPeg";
1818
import {IMediaEventContent, IPreparedMedia, prepEventContentAsMedia} from "./models/IMediaEventContent";
1919
import {ResizeMethod} from "../Avatar";
20+
import {MatrixClient} from "matrix-js-sdk/src/client";
2021

2122
// Populate this class with the details of your customisations when copying it.
2223

@@ -30,8 +31,14 @@ import {ResizeMethod} from "../Avatar";
3031
* "thumbnail media", derived from event contents or external sources.
3132
*/
3233
export class Media {
34+
private client: MatrixClient;
35+
3336
// Per above, this constructor signature can be whatever is helpful for you.
34-
constructor(private prepared: IPreparedMedia) {
37+
constructor(private prepared: IPreparedMedia, client?: MatrixClient) {
38+
this.client = client ?? MatrixClientPeg.get();
39+
if (!this.client) {
40+
throw new Error("No possible MatrixClient for media resolution. Please provide one or log in.");
41+
}
3542
}
3643

3744
/**
@@ -67,7 +74,7 @@ export class Media {
6774
* The HTTP URL for the source media.
6875
*/
6976
public get srcHttp(): string {
70-
return MatrixClientPeg.get().mxcUrlToHttp(this.srcMxc);
77+
return this.client.mxcUrlToHttp(this.srcMxc);
7178
}
7279

7380
/**
@@ -76,7 +83,7 @@ export class Media {
7683
*/
7784
public get thumbnailHttp(): string | undefined | null {
7885
if (!this.hasThumbnail) return null;
79-
return MatrixClientPeg.get().mxcUrlToHttp(this.thumbnailMxc);
86+
return this.client.mxcUrlToHttp(this.thumbnailMxc);
8087
}
8188

8289
/**
@@ -89,7 +96,7 @@ export class Media {
8996
*/
9097
public getThumbnailHttp(width: number, height: number, mode: ResizeMethod = "scale"): string | null | undefined {
9198
if (!this.hasThumbnail) return null;
92-
return MatrixClientPeg.get().mxcUrlToHttp(this.thumbnailMxc, width, height, mode);
99+
return this.client.mxcUrlToHttp(this.thumbnailMxc, width, height, mode);
93100
}
94101

95102
/**
@@ -100,7 +107,7 @@ export class Media {
100107
* @returns {string} The HTTP URL which points to the thumbnail.
101108
*/
102109
public getThumbnailOfSourceHttp(width: number, height: number, mode: ResizeMethod = "scale"): string {
103-
return MatrixClientPeg.get().mxcUrlToHttp(this.srcMxc, width, height, mode);
110+
return this.client.mxcUrlToHttp(this.srcMxc, width, height, mode);
104111
}
105112

106113
/**
@@ -128,17 +135,19 @@ export class Media {
128135
/**
129136
* Creates a media object from event content.
130137
* @param {IMediaEventContent} content The event content.
138+
* @param {MatrixClient} client? Optional client to use.
131139
* @returns {Media} The media object.
132140
*/
133-
export function mediaFromContent(content: IMediaEventContent): Media {
134-
return new Media(prepEventContentAsMedia(content));
141+
export function mediaFromContent(content: IMediaEventContent, client?: MatrixClient): Media {
142+
return new Media(prepEventContentAsMedia(content), client);
135143
}
136144

137145
/**
138146
* Creates a media object from an MXC URI.
139147
* @param {string} mxc The MXC URI.
148+
* @param {MatrixClient} client? Optional client to use.
140149
* @returns {Media} The media object.
141150
*/
142-
export function mediaFromMxc(mxc: string): Media {
143-
return mediaFromContent({url: mxc});
151+
export function mediaFromMxc(mxc: string, client?: MatrixClient): Media {
152+
return mediaFromContent({url: mxc}, client);
144153
}

0 commit comments

Comments
 (0)