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

Commit 60bed46

Browse files
authored
Add an action to upload media files according to MSC4039 (#11311)
Signed-off-by: Dominik Henneke <dominik.henneke@nordeck.net>
1 parent 902aea8 commit 60bed46

File tree

8 files changed

+66
-7
lines changed

8 files changed

+66
-7
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
"matrix-encrypt-attachment": "^1.0.3",
103103
"matrix-events-sdk": "0.0.1",
104104
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
105-
"matrix-widget-api": "^1.5.0",
105+
"matrix-widget-api": "^1.6.0",
106106
"memoize-one": "^6.0.0",
107107
"minimist": "^1.2.5",
108108
"oidc-client-ts": "^2.2.4",

src/components/views/dialogs/ModalWidgetDialog.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export default class ModalWidgetDialog extends React.PureComponent<IProps, IStat
136136
clientId: ELEMENT_CLIENT_ID,
137137
clientTheme: SettingsStore.getValue("theme"),
138138
clientLanguage: getUserLanguage(),
139+
baseUrl: MatrixClientPeg.safeGet().baseUrl,
139140
});
140141

141142
const parsed = new URL(templated);

src/stores/widgets/StopGapWidget.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ export class StopGapWidget extends EventEmitter {
218218
clientTheme: SettingsStore.getValue("theme"),
219219
clientLanguage: getUserLanguage(),
220220
deviceId: this.client.getDeviceId() ?? undefined,
221+
baseUrl: this.client.baseUrl,
221222
};
222223
const templated = this.mockWidget.getCompleteUrl(Object.assign(defaults, fromCustomisation), opts?.asPopout);
223224

src/stores/widgets/StopGapWidgetDriver.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ import {
3232
WidgetEventCapability,
3333
WidgetKind,
3434
ISearchUserDirectoryResult,
35+
IGetMediaConfigResult,
3536
} from "matrix-widget-api";
3637
import {
3738
ClientEvent,
@@ -523,4 +524,18 @@ export class StopGapWidgetDriver extends WidgetDriver {
523524
})),
524525
};
525526
}
527+
528+
public async getMediaConfig(): Promise<IGetMediaConfigResult> {
529+
const client = MatrixClientPeg.safeGet();
530+
531+
return await client.getMediaConfig();
532+
}
533+
534+
public async uploadFile(file: XMLHttpRequestBodyInit): Promise<{ contentUri: string }> {
535+
const client = MatrixClientPeg.safeGet();
536+
537+
const uploadResult = await client.uploadContent(file);
538+
539+
return { contentUri: uploadResult.content_uri };
540+
}
526541
}

test/stores/widgets/StopGapWidget-test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ describe("StopGapWidget", () => {
4242
id: "test",
4343
creatorUserId: "@alice:example.org",
4444
type: "example",
45-
url: "https://example.org?user-id=$matrix_user_id&device-id=$org.matrix.msc3819.matrix_device_id",
45+
url: "https://example.org?user-id=$matrix_user_id&device-id=$org.matrix.msc3819.matrix_device_id&base-url=$org.matrix.msc4039.matrix_base_url",
4646
roomId: "!1:example.org",
4747
},
4848
room: mkRoom(client, "!1:example.org"),
@@ -62,7 +62,7 @@ describe("StopGapWidget", () => {
6262

6363
it("should replace parameters in widget url template", () => {
6464
expect(widget.embedUrl).toBe(
65-
"https://example.org/?user-id=%40userId%3Amatrix.org&device-id=ABCDEFGHI&widgetId=test&parentUrl=http%3A%2F%2Flocalhost%2F",
65+
"https://example.org/?user-id=%40userId%3Amatrix.org&device-id=ABCDEFGHI&base-url=https%3A%2F%2Fmatrix-client.matrix.org&widgetId=test&parentUrl=http%3A%2F%2Flocalhost%2F",
6666
);
6767
});
6868

test/stores/widgets/StopGapWidgetDriver-test.ts

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -447,4 +447,44 @@ describe("StopGapWidgetDriver", () => {
447447
expect(client.searchUserDirectory).toHaveBeenCalledWith({ term: "foo", limit: 25 });
448448
});
449449
});
450+
451+
describe("getMediaConfig", () => {
452+
let driver: WidgetDriver;
453+
454+
beforeEach(() => {
455+
driver = mkDefaultDriver();
456+
});
457+
458+
it("gets the media configuration", async () => {
459+
client.getMediaConfig.mockResolvedValue({
460+
"m.upload.size": 1000,
461+
});
462+
463+
await expect(driver.getMediaConfig()).resolves.toEqual({
464+
"m.upload.size": 1000,
465+
});
466+
467+
expect(client.getMediaConfig).toHaveBeenCalledWith();
468+
});
469+
});
470+
471+
describe("uploadFile", () => {
472+
let driver: WidgetDriver;
473+
474+
beforeEach(() => {
475+
driver = mkDefaultDriver();
476+
});
477+
478+
it("uploads a file", async () => {
479+
client.uploadContent.mockResolvedValue({
480+
content_uri: "mxc://...",
481+
});
482+
483+
await expect(driver.uploadFile("data")).resolves.toEqual({
484+
contentUri: "mxc://...",
485+
});
486+
487+
expect(client.uploadContent).toHaveBeenCalledWith("data");
488+
});
489+
});
450490
});

test/test-utils/test-utils.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,8 @@ export function createTestClient(): MatrixClient {
249249
addThreePidOnly: jest.fn(),
250250
requestMsisdnToken: jest.fn(),
251251
submitMsisdnToken: jest.fn(),
252+
getMediaConfig: jest.fn(),
253+
baseUrl: "https://matrix-client.matrix.org",
252254
} as unknown as MatrixClient;
253255

254256
client.reEmitter = new ReEmitter(client);

yarn.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7589,10 +7589,10 @@ matrix-web-i18n@^2.1.0:
75897589
lodash "^4.17.21"
75907590
walk "^2.3.15"
75917591

7592-
matrix-widget-api@^1.5.0:
7593-
version "1.5.0"
7594-
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.5.0.tgz#4ae3e46a7f2854f944ddaf8a5af63d72fba76c45"
7595-
integrity sha512-hKGfqQKK5qVMwW0Sp8l2TiuW8UuHafTvUZNSWBPghedB/rSFbVLlr0mufuEV0iq/pQ7ChW96q/WEC6Llie4SnA==
7592+
matrix-widget-api@^1.5.0, matrix-widget-api@^1.6.0:
7593+
version "1.6.0"
7594+
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.6.0.tgz#f0075411edffc6de339580ade7e6e6e6edb01af4"
7595+
integrity sha512-VXIJyAZ/WnBmT4C7ePqevgMYGneKMCP/0JuCOqntSsaNlCRHJvwvTxmqUU+ufOpzIF5gYNyIrAjbgrEbK3iqJQ==
75967596
dependencies:
75977597
"@types/events" "^3.0.0"
75987598
events "^3.2.0"

0 commit comments

Comments
 (0)