1717import { MatrixClientPeg } from "../MatrixClientPeg" ;
1818import { IMediaEventContent , IPreparedMedia , prepEventContentAsMedia } from "./models/IMediaEventContent" ;
1919import { 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 */
3233export 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