Skip to content

Commit 933a49f

Browse files
authored
use open file as file message default behavior. (#534)
1 parent 23aa249 commit 933a49f

File tree

7 files changed

+71
-69
lines changed

7 files changed

+71
-69
lines changed

lib/generated/intl/messages_en.dart

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -49,25 +49,27 @@ class MessageLookup extends MessageLookupByLibrary {
4949

5050
static String m13(value) => "Delete chat: ${value}";
5151

52-
static String m14(name) => "Message ${name}";
52+
static String m14(name) => "Failed to open file ${name}";
5353

54-
static String m15(name) => "Remove ${name}";
54+
static String m15(name) => "Message ${name}";
5555

56-
static String m16(name) => "Do you want to delete ${name} circle?";
56+
static String m16(name) => "Remove ${name}";
5757

58-
static String m17(date) => "${date} join";
58+
static String m17(name) => "Do you want to delete ${name} circle?";
5959

60-
static String m18(count) => "${count} Participants";
60+
static String m18(date) => "${date} join";
6161

62-
static String m19(count) => "${count} Pinned Messages";
62+
static String m19(count) => "${count} Participants";
6363

64-
static String m20(user, preview) => "${user} pinned ${preview}";
64+
static String m20(count) => "${count} Pinned Messages";
6565

66-
static String m21(count) => "${count} related messages";
66+
static String m21(user, preview) => "${user} pinned ${preview}";
6767

68-
static String m22(value) => "value now ${value}";
68+
static String m22(count) => "${count} related messages";
6969

70-
static String m23(value) => "value then ${value}";
70+
static String m23(value) => "value now ${value}";
71+
72+
static String m24(value) => "value then ${value}";
7173

7274
final messages = _notInlinedMessages(_notInlinedMessages);
7375
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -193,6 +195,7 @@ class MessageLookup extends MessageLookupByLibrary {
193195
"exitGroup": MessageLookupByLibrary.simpleMessage("Delete and Exit"),
194196
"extensions": MessageLookupByLibrary.simpleMessage("Extensions"),
195197
"failed": MessageLookupByLibrary.simpleMessage("Failed"),
198+
"failedToOpenFile": m14,
196199
"file": MessageLookupByLibrary.simpleMessage("File"),
197200
"files": MessageLookupByLibrary.simpleMessage("Files"),
198201
"followFacebook":
@@ -221,8 +224,8 @@ class MessageLookup extends MessageLookupByLibrary {
221224
MessageLookupByLibrary.simpleMessage("Dismiss admin"),
222225
"groupPopMenuMakeAdmin":
223226
MessageLookupByLibrary.simpleMessage("Make group admin"),
224-
"groupPopMenuMessage": m14,
225-
"groupPopMenuRemoveParticipants": m15,
227+
"groupPopMenuMessage": m15,
228+
"groupPopMenuRemoveParticipants": m16,
226229
"groupSearchParticipants":
227230
MessageLookupByLibrary.simpleMessage("Mixin ID, Name"),
228231
"groups": MessageLookupByLibrary.simpleMessage("Groups"),
@@ -280,11 +283,9 @@ class MessageLookup extends MessageLookupByLibrary {
280283
"Notifications are not allowed, please go to Notification Settings to turn on."),
281284
"notificationPermissionTitle":
282285
MessageLookupByLibrary.simpleMessage("Turn On Notifications"),
283-
"openInExternalApp":
284-
MessageLookupByLibrary.simpleMessage("Open in External App"),
285286
"originalImage": MessageLookupByLibrary.simpleMessage("Original"),
286-
"pageDeleteCircle": m16,
287-
"pageEditProfileJoin": m17,
287+
"pageDeleteCircle": m17,
288+
"pageEditProfileJoin": m18,
288289
"pageLandingClickToReload":
289290
MessageLookupByLibrary.simpleMessage("CLICK TO RELOAD QR CODE"),
290291
"pageLandingLoginMessage": MessageLookupByLibrary.simpleMessage(
@@ -293,12 +294,12 @@ class MessageLookup extends MessageLookupByLibrary {
293294
"Login to Mixin Messenger by QR Code"),
294295
"pageRightEmptyMessage": MessageLookupByLibrary.simpleMessage(
295296
"Select a conversation to start messaging"),
296-
"participantsCount": m18,
297+
"participantsCount": m19,
297298
"phoneNumber": MessageLookupByLibrary.simpleMessage("Phone number"),
298299
"photos": MessageLookupByLibrary.simpleMessage("Photos"),
299300
"pin": MessageLookupByLibrary.simpleMessage("Pin"),
300-
"pinMessageCount": m19,
301-
"pinned": m20,
301+
"pinMessageCount": m20,
302+
"pinned": m21,
302303
"pleaseWait":
303304
MessageLookupByLibrary.simpleMessage("Please wait a moment"),
304305
"post": MessageLookupByLibrary.simpleMessage("Post"),
@@ -329,7 +330,7 @@ class MessageLookup extends MessageLookupByLibrary {
329330
"searchEmpty": MessageLookupByLibrary.simpleMessage(
330331
"No chats, \ncontacts or messages found."),
331332
"searchMessageHistory": MessageLookupByLibrary.simpleMessage("Search"),
332-
"searchRelatedMessage": m21,
333+
"searchRelatedMessage": m22,
333334
"searchUser": MessageLookupByLibrary.simpleMessage("Search contact"),
334335
"searchUserHint":
335336
MessageLookupByLibrary.simpleMessage("Mixin ID or Phone number"),
@@ -391,10 +392,10 @@ class MessageLookup extends MessageLookupByLibrary {
391392
"videos": MessageLookupByLibrary.simpleMessage("Videos"),
392393
"waitingForThisMessage":
393394
MessageLookupByLibrary.simpleMessage("Waiting for this message."),
394-
"walletTransactionCurrentValue": m22,
395+
"walletTransactionCurrentValue": m23,
395396
"walletTransactionThatTimeNoValue":
396397
MessageLookupByLibrary.simpleMessage("value then N/A"),
397-
"walletTransactionThatTimeValue": m23,
398+
"walletTransactionThatTimeValue": m24,
398399
"webView2RuntimeInstallDescription": MessageLookupByLibrary.simpleMessage(
399400
"The device has not installed the WebView2 Runtime component. Please download and install WebView2 Runtime first."),
400401
"webViewRuntimeNotAvailable": MessageLookupByLibrary.simpleMessage(

lib/generated/intl/messages_zh.dart

Lines changed: 23 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -46,25 +46,27 @@ class MessageLookup extends MessageLookupByLibrary {
4646

4747
static String m13(value) => "删除对话:${value}";
4848

49-
static String m14(name) => "发送消息至 ${name}";
49+
static String m14(name) => "无法打开文件:${name}";
5050

51-
static String m15(name) => "移除 ${name}";
51+
static String m15(name) => "发送消息至 ${name}";
5252

53-
static String m16(name) => "确定删除${name}圈子吗?";
53+
static String m16(name) => "移除 ${name}";
5454

55-
static String m17(date) => "${date}加入";
55+
static String m17(name) => "确定删除${name}圈子吗?";
5656

57-
static String m18(count) => "共 ${count} 人";
57+
static String m18(date) => "${date}加入";
5858

59-
static String m19(count) => "${count}条置顶消息";
59+
static String m19(count) => "${count}";
6060

61-
static String m20(user, preview) => "${user}置顶了${preview}";
61+
static String m20(count) => "${count}条置顶消息";
6262

63-
static String m21(count) => "${count} 条相关的消息";
63+
static String m21(user, preview) => "${user}置顶了${preview}";
6464

65-
static String m22(value) => "价值 ${value}";
65+
static String m22(count) => "${count} 条相关的消息";
6666

67-
static String m23(value) => "当时价值 ${value}";
67+
static String m23(value) => "价值 ${value}";
68+
69+
static String m24(value) => "当时价值 ${value}";
6870

6971
final messages = _notInlinedMessages(_notInlinedMessages);
7072
static Map<String, Function> _notInlinedMessages(_) => <String, Function>{
@@ -166,6 +168,7 @@ class MessageLookup extends MessageLookupByLibrary {
166168
"exitGroup": MessageLookupByLibrary.simpleMessage("退出群组"),
167169
"extensions": MessageLookupByLibrary.simpleMessage("机器人"),
168170
"failed": MessageLookupByLibrary.simpleMessage("失败"),
171+
"failedToOpenFile": m14,
169172
"file": MessageLookupByLibrary.simpleMessage("文件"),
170173
"files": MessageLookupByLibrary.simpleMessage("文档"),
171174
"followFacebook":
@@ -191,8 +194,8 @@ class MessageLookup extends MessageLookupByLibrary {
191194
MessageLookupByLibrary.simpleMessage("撤销管理员身份"),
192195
"groupPopMenuMakeAdmin":
193196
MessageLookupByLibrary.simpleMessage("设定为群组管理员"),
194-
"groupPopMenuMessage": m14,
195-
"groupPopMenuRemoveParticipants": m15,
197+
"groupPopMenuMessage": m15,
198+
"groupPopMenuRemoveParticipants": m16,
196199
"groupSearchParticipants":
197200
MessageLookupByLibrary.simpleMessage("Mixin ID, 昵称"),
198201
"groups": MessageLookupByLibrary.simpleMessage("群组"),
@@ -244,10 +247,9 @@ class MessageLookup extends MessageLookupByLibrary {
244247
MessageLookupByLibrary.simpleMessage("未允许通知,请到通知设置开启。"),
245248
"notificationPermissionTitle":
246249
MessageLookupByLibrary.simpleMessage("打开通知"),
247-
"openInExternalApp": MessageLookupByLibrary.simpleMessage("通过外部程序打开"),
248250
"originalImage": MessageLookupByLibrary.simpleMessage("原图"),
249-
"pageDeleteCircle": m16,
250-
"pageEditProfileJoin": m17,
251+
"pageDeleteCircle": m17,
252+
"pageEditProfileJoin": m18,
251253
"pageLandingClickToReload":
252254
MessageLookupByLibrary.simpleMessage("点击重新加载二维码"),
253255
"pageLandingLoginMessage": MessageLookupByLibrary.simpleMessage(
@@ -256,12 +258,12 @@ class MessageLookup extends MessageLookupByLibrary {
256258
MessageLookupByLibrary.simpleMessage("通过二维码登录 Mixin Messenger"),
257259
"pageRightEmptyMessage":
258260
MessageLookupByLibrary.simpleMessage("选择一个对话,开始发送信息"),
259-
"participantsCount": m18,
261+
"participantsCount": m19,
260262
"phoneNumber": MessageLookupByLibrary.simpleMessage("手机号"),
261263
"photos": MessageLookupByLibrary.simpleMessage("照片"),
262264
"pin": MessageLookupByLibrary.simpleMessage("置顶"),
263-
"pinMessageCount": m19,
264-
"pinned": m20,
265+
"pinMessageCount": m20,
266+
"pinned": m21,
265267
"pleaseWait": MessageLookupByLibrary.simpleMessage("请稍等一下"),
266268
"post": MessageLookupByLibrary.simpleMessage("文章"),
267269
"preview": MessageLookupByLibrary.simpleMessage("预览"),
@@ -286,7 +288,7 @@ class MessageLookup extends MessageLookupByLibrary {
286288
"search": MessageLookupByLibrary.simpleMessage("搜索"),
287289
"searchEmpty": MessageLookupByLibrary.simpleMessage("找不到联系人或消息。"),
288290
"searchMessageHistory": MessageLookupByLibrary.simpleMessage("搜索聊天记录"),
289-
"searchRelatedMessage": m21,
291+
"searchRelatedMessage": m22,
290292
"searchUser": MessageLookupByLibrary.simpleMessage("搜索用户"),
291293
"searchUserHint": MessageLookupByLibrary.simpleMessage("Mixin ID 或手机号"),
292294
"send": MessageLookupByLibrary.simpleMessage("发送"),
@@ -339,10 +341,10 @@ class MessageLookup extends MessageLookupByLibrary {
339341
"videos": MessageLookupByLibrary.simpleMessage("视频"),
340342
"waitingForThisMessage":
341343
MessageLookupByLibrary.simpleMessage("正在等待这个消息。"),
342-
"walletTransactionCurrentValue": m22,
344+
"walletTransactionCurrentValue": m23,
343345
"walletTransactionThatTimeNoValue":
344346
MessageLookupByLibrary.simpleMessage("当时价值 暂无"),
345-
"walletTransactionThatTimeValue": m23,
347+
"walletTransactionThatTimeValue": m24,
346348
"webView2RuntimeInstallDescription":
347349
MessageLookupByLibrary.simpleMessage(
348350
"该设备暂未安装 WebView2 组件,请先下载并安装 WebView2 Runtime。"),

lib/generated/l10n.dart

Lines changed: 10 additions & 10 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/l10n/intl_en.arb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@
236236
"saveAs": "Save as",
237237
"noResults": "No results",
238238
"saveToGallery": "Save to Gallery",
239-
"openInExternalApp": "Open in External App",
240239
"typeAMessage": "Type message",
241240
"stickerShop": "Sticker shop",
242241
"add": "Add",
@@ -250,5 +249,6 @@
250249
"originalImage": "Original",
251250
"editImageClearWarning": "All changes will be lost. Are you sure you want to exit?",
252251
"reset": "Reset",
253-
"groupsInCommon": "Groups in common"
252+
"groupsInCommon": "Groups in common",
253+
"failedToOpenFile": "Failed to open file {name}"
254254
}

lib/l10n/intl_zh.arb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,6 @@
231231
"saveAs": "另存为",
232232
"noResults": "没有结果",
233233
"saveToGallery": "保存到图库",
234-
"openInExternalApp": "通过外部程序打开",
235234
"typeAMessage": "输入消息",
236235
"stickerShop": "表情商店",
237236
"add": "添加",
@@ -245,5 +244,6 @@
245244
"originalImage": "原图",
246245
"editImageClearWarning": "退出将会清除此次所有的改动。",
247246
"reset": "重置",
248-
"groupsInCommon": "共同群组"
247+
"groupsInCommon": "共同群组",
248+
"failedToOpenFile": "无法打开文件:{name}"
249249
}

lib/widgets/message/item/file_message.dart

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,16 @@ import 'package:flutter/widgets.dart';
44
import 'package:flutter_hooks/flutter_hooks.dart';
55
import 'package:mime/mime.dart';
66
import 'package:mixin_bot_sdk_dart/mixin_bot_sdk_dart.dart';
7+
import 'package:open_file/open_file.dart';
78
import 'package:path/path.dart' as p;
89

910
import '../../../constants/brightness_theme_data.dart';
1011
import '../../../enum/media_status.dart';
1112
import '../../../utils/extension/extension.dart';
13+
import '../../../utils/logger.dart';
1214
import '../../interactive_decorated_box.dart';
1315
import '../../status.dart';
16+
import '../../toast.dart';
1417
import '../message.dart';
1518
import '../message_bubble.dart';
1619
import '../message_datetime_and_status.dart';
@@ -70,8 +73,14 @@ class MessageFile extends HookWidget {
7073
} else if (message.mediaStatus == MediaStatus.done &&
7174
message.mediaUrl != null) {
7275
if (message.mediaUrl?.isEmpty ?? true) return;
73-
await saveAs(
74-
context, context.accountServer, message, isTranscriptPage);
76+
final path = context.accountServer
77+
.convertMessageAbsolutePath(message, isTranscriptPage);
78+
final openResult = await OpenFile.open(path);
79+
if (openResult.type != ResultType.done) {
80+
i('open file result: $mediaName ${openResult.type} ${openResult.message}');
81+
await showToastFailed(
82+
context, ToastError(context.l10n.failedToOpenFile(mediaName)));
83+
}
7584
} else if (message.mediaStatus == MediaStatus.pending) {
7685
await context.accountServer
7786
.cancelProgressAttachmentJob(message.messageId);

lib/widgets/message/message.dart

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import '../../utils/extension/extension.dart';
3030
import '../../utils/file.dart';
3131
import '../../utils/hook.dart';
3232
import '../../utils/platform.dart';
33-
import '../../utils/uri_utils.dart';
3433
import '../menu.dart';
3534
import '../toast.dart';
3635
import '../user_selector/conversation_selector.dart';
@@ -216,9 +215,6 @@ class MessageItemWidget extends HookWidget {
216215
return const StrangerMessage();
217216
}
218217

219-
final path = context.accountServer
220-
.convertMessageAbsolutePath(message, isTranscriptPage);
221-
222218
return _MessageBubbleMargin(
223219
userName: userName,
224220
userId: userId,
@@ -290,12 +286,6 @@ class MessageItemWidget extends HookWidget {
290286
onTap: () => saveAs(context, context.accountServer,
291287
message, isTranscriptPage),
292288
),
293-
if (message.type.isData && File(path).xFile.isVideo)
294-
ContextMenu(
295-
title: context.l10n.openInExternalApp,
296-
onTap: () =>
297-
openUri(context, Uri.file(path).toString()),
298-
),
299289
],
300290
if ([
301291
MessageStatus.sent,

0 commit comments

Comments
 (0)