use gomuks for downloading media

This commit is contained in:
Henry Hiles 2026-07-26 23:01:36 -04:00
commit fa451621de
Signed by: Henry-Hiles
SSH key fingerprint: SHA256:VKQUdS31Q90KvX7EkKMHMBpUspcmItAh86a+v7PGiIs
20 changed files with 159 additions and 241 deletions

View file

@ -12,6 +12,9 @@ typedef EncryptedFile = Map<String, dynamic>;
@Freezed(unionKey: "msgtype", fallbackUnion: "default")
abstract class MessageContent extends Content with _$MessageContent {
MessageContent._();
static String? mediaUrlFromJson(Map<dynamic, dynamic> json, String key) =>
json[key] ?? json["file"]?[key];
factory MessageContent({String? body}) = UnknownMessageContent;
@FreezedUnionValue("m.text")
@ -43,7 +46,7 @@ abstract class MessageContent extends Content with _$MessageContent {
EncryptedFile? file,
String? filename,
ImageInfo? info,
Uri? url,
@JsonKey(readValue: MessageContent.mediaUrlFromJson) required Uri url,
}) = ImageMessageContent;
@FreezedUnionValue("m.file")
@ -54,7 +57,7 @@ abstract class MessageContent extends Content with _$MessageContent {
EncryptedFile? file,
String? filename,
FileInfo? info,
Uri? url,
@JsonKey(readValue: MessageContent.mediaUrlFromJson) required Uri url,
}) = FileMessageContent;
@FreezedUnionValue("m.audio")
@ -65,7 +68,7 @@ abstract class MessageContent extends Content with _$MessageContent {
EncryptedFile? file,
String? filename,
AudioInfo? info,
Uri? url,
@JsonKey(readValue: MessageContent.mediaUrlFromJson) required Uri url,
}) = AudioMessageContent;
@FreezedUnionValue("m.video")
@ -76,7 +79,7 @@ abstract class MessageContent extends Content with _$MessageContent {
EncryptedFile? file,
String? filename,
VideoInfo? info,
Uri? url,
@JsonKey(readValue: MessageContent.mediaUrlFromJson) required Uri url,
}) = VideoMessageContent;
@FreezedUnionValue("m.location")

View file

@ -0,0 +1,16 @@
import "package:freezed_annotation/freezed_annotation.dart";
part "download_media.freezed.dart";
part "download_media.g.dart";
@freezed
abstract class DownloadMediaRequest with _$DownloadMediaRequest {
const factory DownloadMediaRequest({
required Uri mxc,
@Default(false) bool encrypted,
@Default(false) bool isAvatar,
@Default(false) bool thumbnailAvatar,
}) = _DownloadMediaRequest;
factory DownloadMediaRequest.fromJson(Map<String, Object?> json) =>
_$DownloadMediaRequestFromJson(json);
}