Merge pull request #2939 from pangeachat/2933-use-activity-image-url-rather-than-re-uploading-to-matrix

2933 use activity image url rather than re uploading to matrix
This commit is contained in:
ggurdin 2025-06-05 11:37:52 -04:00 committed by GitHub
commit b342fe42ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 60 additions and 35 deletions

View file

@ -1,5 +1,6 @@
import 'package:flutter/material.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:flutter_linkify/flutter_linkify.dart';
import 'package:matrix/matrix.dart';
@ -112,17 +113,39 @@ class ImageBubble extends StatelessWidget {
borderRadius: borderRadius,
child: Hero(
tag: event.eventId,
child: MxcImage(
event: event,
width: width,
height: height,
fit: fit,
animated: animated,
isThumbnail: thumbnailOnly,
placeholder: event.messageType == MessageTypes.Sticker
? null
: _buildPlaceholder,
),
// #Pangea
child: event.content['url'] is String &&
!(event.content['url'] as String).startsWith('mxc')
? CachedNetworkImage(
imageUrl: event.content['url'] as String,
width: width,
height: height,
fit: fit,
placeholder: (context, url) => _buildPlaceholder(context),
)
: MxcImage(
event: event,
width: width,
height: height,
fit: fit,
animated: animated,
isThumbnail: thumbnailOnly,
placeholder: event.messageType == MessageTypes.Sticker
? null
: _buildPlaceholder,
),
// child: MxcImage(
// event: event,
// width: width,
// height: height,
// fit: fit,
// animated: animated,
// isThumbnail: thumbnailOnly,
// placeholder: event.messageType == MessageTypes.Sticker
// ? null
// : _buildPlaceholder,
// ),
// Pangea#
),
),
),

View file

@ -1,5 +1,3 @@
import 'dart:typed_data';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -25,8 +23,6 @@ class ActivityPlannerBuilder extends StatefulWidget {
final Future<void> Function(
String,
ActivityPlanModel,
Uint8List?,
String?,
)? onEdit;
const ActivityPlannerBuilder({
@ -204,8 +200,6 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
await widget.onEdit!(
widget.initialActivity.bookmarkId,
updatedActivity,
avatar,
filename,
);
}
}
@ -225,7 +219,6 @@ class ActivityPlannerBuilderState extends State<ActivityPlannerBuilder> {
updatedActivity,
avatar: avatar,
filename: filename,
avatarURL: imageURL,
);
}

View file

@ -128,7 +128,6 @@ class ActivityRoomSelectionState extends State<ActivityRoomSelection> {
widget.controller.updatedActivity,
avatar: widget.controller.avatar,
filename: widget.controller.filename,
avatarURL: widget.controller.imageURL,
);
_launchStatus[room.id] = 1;
} catch (e, s) {
@ -205,7 +204,6 @@ class ActivityRoomSelectionState extends State<ActivityRoomSelection> {
widget.controller.updatedActivity,
avatar: widget.controller.avatar,
filename: widget.controller.filename,
avatarURL: widget.controller.imageURL,
);
}
_launchStatus["placeholder"] = 1;

View file

@ -273,15 +273,21 @@ extension EventsRoomExtension on Room {
Future<void> sendActivityPlan(
ActivityPlanModel activity, {
Uint8List? avatar,
String? avatarURL,
String? filename,
}) async {
BookmarkedActivitiesRepo.save(activity);
String? imageURL = activity.imageURL;
final eventId = await pangeaSendTextEvent(
activity.markdown,
messageTag: ModelKey.messageTagActivityPlan,
);
Uint8List? bytes = avatar;
if (avatarURL != null && bytes == null) {
if (imageURL != null && bytes == null) {
try {
final resp = await http
.get(Uri.parse(avatarURL))
.get(Uri.parse(imageURL))
.timeout(const Duration(seconds: 5));
bytes = resp.bodyBytes;
} catch (e, s) {
@ -289,12 +295,20 @@ extension EventsRoomExtension on Room {
e: e,
s: s,
data: {
"avatarURL": avatarURL,
"avatarURL": imageURL,
},
);
}
}
if (bytes != null && imageURL == null) {
final url = await client.uploadContent(
bytes,
filename: filename,
);
imageURL = url.toString();
}
MatrixFile? file;
if (filename != null && bytes != null) {
file = MatrixFile(
@ -302,19 +316,16 @@ extension EventsRoomExtension on Room {
name: filename,
);
}
final eventId = await pangeaSendTextEvent(
activity.markdown,
messageTag: ModelKey.messageTagActivityPlan,
);
if (file != null) {
await sendFileEvent(
file,
shrinkImageMaxDimension: 1600,
extraContent: {
ModelKey.messageTags: ModelKey.messageTagActivityPlan,
},
);
final content = <String, dynamic>{
'msgtype': file.msgType,
'body': file.name,
'filename': file.name,
'url': imageURL,
ModelKey.messageTags: ModelKey.messageTagActivityPlan,
};
await sendEvent(content);
}
if (canSendDefaultStates) {