feature: Show link in chat if the saved media file contains one
Some checks are pending
Flutter analyze & test / flutter_analyze_and_test (push) Waiting to run

This commit is contained in:
otsmr 2026-03-01 14:54:09 +01:00
parent ca62069652
commit e9ea0a7f16
2 changed files with 75 additions and 23 deletions

View file

@ -1,7 +1,8 @@
# Changelog
## 0.0.94
## 0.0.95
Feature: Show link in chat if the saved media file contains one
Fix: Problem with decrypting messages fixed
## 0.0.93

View file

@ -6,6 +6,7 @@ import 'package:twonly/src/database/tables/mediafiles.table.dart';
import 'package:twonly/src/database/tables/messages.table.dart';
import 'package:twonly/src/database/twonly.db.dart';
import 'package:twonly/src/model/memory_item.model.dart';
import 'package:twonly/src/model/protobuf/client/generated/data.pb.dart';
import 'package:twonly/src/model/protobuf/client/generated/messages.pb.dart'
hide Message;
import 'package:twonly/src/services/api/mediafiles/download.service.dart'
@ -13,8 +14,10 @@ import 'package:twonly/src/services/api/mediafiles/download.service.dart'
import 'package:twonly/src/services/api/messages.dart';
import 'package:twonly/src/services/mediafiles/mediafile.service.dart';
import 'package:twonly/src/utils/misc.dart';
import 'package:twonly/src/views/chats/chat_messages_components/entries/common.dart';
import 'package:twonly/src/views/chats/chat_messages_components/in_chat_media_viewer.dart';
import 'package:twonly/src/views/chats/media_viewer.view.dart';
import 'package:twonly/src/views/components/better_text.dart';
class ChatMediaEntry extends StatefulWidget {
const ChatMediaEntry({
@ -114,7 +117,52 @@ class _ChatMediaEntryState extends State<ChatMediaEntry> {
context,
);
return GestureDetector(
var imageBorderRadius = BorderRadius.circular(12);
Widget additionalMessageData = Container();
final addData = widget.message.additionalMessageData;
if (addData != null) {
final info =
getBubbleInfo(context, widget.message, null, null, null, 200);
final data = AdditionalMessageData.fromBuffer(addData);
if (data.hasLink()) {
imageBorderRadius = const BorderRadius.only(
topLeft: Radius.circular(12),
topRight: Radius.circular(12),
bottomLeft: Radius.circular(5),
bottomRight: Radius.circular(5),
);
additionalMessageData = Container(
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * 0.8,
),
padding:
const EdgeInsets.only(left: 10, top: 6, bottom: 6, right: 10),
decoration: BoxDecoration(
color: info.color,
borderRadius: const BorderRadius.only(
topLeft: Radius.circular(5),
topRight: Radius.circular(12),
bottomLeft: Radius.circular(12),
bottomRight: Radius.circular(12),
),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
BetterText(text: data.link, textColor: info.textColor),
],
),
);
}
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
GestureDetector(
key: reopenMediaFile,
onDoubleTap: onDoubleTap,
onTap: (widget.message.type == MessageType.media.name) ? onTap : null,
@ -127,7 +175,7 @@ class _ChatMediaEntryState extends State<ChatMediaEntry> {
child: Align(
alignment: Alignment.centerRight,
child: ClipRRect(
borderRadius: BorderRadius.circular(12),
borderRadius: imageBorderRadius,
child: InChatMediaViewer(
message: widget.message,
group: widget.group,
@ -139,6 +187,9 @@ class _ChatMediaEntryState extends State<ChatMediaEntry> {
),
),
),
),
additionalMessageData,
],
);
}
}