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

Commit

Permalink
Implement download_file in widget driver (#12931)
Browse files Browse the repository at this point in the history
* Implement download_file in widget driver

Signed-off-by: Michael Weimann <michael.weimann@nordeck.net>

* Fix test URIs

Signed-off-by: Michael Weimann <michael.weimann@nordeck.net>

* Use download-file branch as widget-api source

Signed-off-by: Michael Weimann <michael.weimann@nordeck.net>

* bump matrix-widget-api to 1.9.0

Signed-off-by: Kim Brose <kim.brose@nordeck.net>

* prettier

Signed-off-by: Kim Brose <kim.brose@nordeck.net>

---------

Signed-off-by: Michael Weimann <michael.weimann@nordeck.net>
Signed-off-by: Kim Brose <kim.brose@nordeck.net>
Co-authored-by: Kim Brose <kim.brose@nordeck.net>
  • Loading branch information
weeman1337 and Kim Brose committed Aug 30, 2024
1 parent 2a450c0 commit 19f8b44
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 1 deletion.
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@
"matrix-encrypt-attachment": "^1.0.3",
"matrix-events-sdk": "0.0.1",
"matrix-js-sdk": "github:matrix-org/matrix-js-sdk#develop",
"matrix-widget-api": "^1.8.2",
"matrix-widget-api": "^1.9.0",
"memoize-one": "^6.0.0",
"minimist": "^1.2.5",
"oidc-client-ts": "^3.0.1",
Expand Down
15 changes: 15 additions & 0 deletions src/stores/widgets/StopGapWidgetDriver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@ import { navigateToPermalink } from "../../utils/permalinks/navigator";
import { SdkContextClass } from "../../contexts/SDKContext";
import { ModuleRunner } from "../../modules/ModuleRunner";
import SettingsStore from "../../settings/SettingsStore";
import { Media } from "../../customisations/Media";

// TODO: Purge this from the universe

Expand Down Expand Up @@ -679,4 +680,18 @@ export class StopGapWidgetDriver extends WidgetDriver {

return { contentUri: uploadResult.content_uri };
}

/**
* Download a file from the media repository on the homeserver.
*
* @param contentUri - the MXC URI of the file to download
* @returns an object with: file - response contents as Blob
*/
public async downloadFile(contentUri: string): Promise<{ file: XMLHttpRequestBodyInit }> {
const client = MatrixClientPeg.safeGet();
const media = new Media({ mxc: contentUri }, client);
const response = await media.downloadSource();
const blob = await response.blob();
return { file: blob };
}
}
29 changes: 29 additions & 0 deletions test/stores/widgets/StopGapWidgetDriver-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ limitations under the License.
*/

import { mocked, MockedObject } from "jest-mock";
import fetchMockJest from "fetch-mock-jest";
import {
MatrixClient,
ClientEvent,
Expand Down Expand Up @@ -616,4 +617,32 @@ describe("StopGapWidgetDriver", () => {
expect(client.uploadContent).toHaveBeenCalledWith("data");
});
});

describe("downloadFile", () => {
let driver: WidgetDriver;

beforeEach(() => {
driver = mkDefaultDriver();
});

it("should download a file and return the blob", async () => {
// eslint-disable-next-line no-restricted-properties
client.mxcUrlToHttp.mockImplementation((mxcUrl) => {
if (mxcUrl === "mxc://example.com/test_file") {
return "https://example.com/_matrix/media/v3/download/example.com/test_file";
}

return null;
});

fetchMockJest.get("https://example.com/_matrix/media/v3/download/example.com/test_file", "test contents");

const result = await driver.downloadFile("mxc://example.com/test_file");
// A type test is impossible here because of
// https://github.com/jefflau/jest-fetch-mock/issues/209
// Tell TypeScript that file is a blob.
const file = result.file as Blob;
await expect(file.text()).resolves.toEqual("test contents");
});
});
});
8 changes: 8 additions & 0 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7038,6 +7038,14 @@ matrix-widget-api@^1.8.2:
"@types/events" "^3.0.0"
events "^3.2.0"

matrix-widget-api@^1.9.0:
version "1.9.0"
resolved "https://registry.yarnpkg.com/matrix-widget-api/-/matrix-widget-api-1.9.0.tgz#884136b405bd3c56e4ea285095c9e01ec52b6b1f"
integrity sha512-au8mqralNDqrEvaVAkU37bXOb8I9SCe+ACdPk11QWw58FKstVq31q2wRz+qWA6J+42KJ6s1DggWbG/S3fEs3jw==
dependencies:
"@types/events" "^3.0.0"
events "^3.2.0"

md5@^2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/md5/-/md5-2.3.0.tgz#c3da9a6aae3a30b46b7b0c349b87b110dc3bda4f"
Expand Down

0 comments on commit 19f8b44

Please sign in to comment.