mirror of
https://gitlab.com/comunic/comunicmobile
synced 2025-06-19 16:25:17 +00:00
Extend the possibilities of file picker
This commit is contained in:
@ -6,16 +6,15 @@ import 'package:comunic/helpers/server_config_helper.dart';
|
||||
import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/lists/conversation_messages_list.dart';
|
||||
import 'package:comunic/lists/users_list.dart';
|
||||
import 'package:comunic/models/api_request.dart';
|
||||
import 'package:comunic/models/conversation.dart';
|
||||
import 'package:comunic/models/conversation_message.dart';
|
||||
import 'package:comunic/models/new_conversation_message.dart';
|
||||
import 'package:comunic/ui/dialogs/pick_file_dialog.dart';
|
||||
import 'package:comunic/ui/routes/main_route/main_route.dart';
|
||||
import 'package:comunic/ui/tiles/conversation_message_tile.dart';
|
||||
import 'package:comunic/ui/tiles/server_conversation_message_tile.dart';
|
||||
import 'package:comunic/ui/widgets/safe_state.dart';
|
||||
import 'package:comunic/ui/widgets/scroll_watcher.dart';
|
||||
import 'package:comunic/utils/files_utils.dart';
|
||||
import 'package:comunic/utils/intl_utils.dart';
|
||||
import 'package:comunic/utils/list_utils.dart';
|
||||
import 'package:comunic/utils/log_utils.dart';
|
||||
@ -221,49 +220,42 @@ class _ConversationScreenState extends SafeState<ConversationScreen> {
|
||||
_setError(ErrorLevel.NONE);
|
||||
}
|
||||
|
||||
/// Pick and send an image
|
||||
Future<void> _sendImage(BuildContext context) async {
|
||||
/// Send a file message
|
||||
Future<void> _sendFileMessage() async {
|
||||
try {
|
||||
final image = await pickImage(context);
|
||||
final file = await showPickFileDialog(
|
||||
context: context,
|
||||
maxFileSize: srvConfig.conversationsPolicy.filesMaxSize,
|
||||
allowedMimeTypes: srvConfig.conversationsPolicy.allowedFilesType,
|
||||
);
|
||||
|
||||
if (image == null) return;
|
||||
if (file == null) return;
|
||||
|
||||
await _sendFileMessage(BytesFile(
|
||||
image.path.split("/").last,
|
||||
await image.readAsBytes(),
|
||||
));
|
||||
await _submitMessage(
|
||||
NewConversationMessage(
|
||||
conversationID: widget.conversationID,
|
||||
message: null,
|
||||
file: file,
|
||||
),
|
||||
);
|
||||
} catch (e, s) {
|
||||
logError(e, s);
|
||||
showSimpleSnack(context, tr("Failed to send image!"));
|
||||
showSimpleSnack(context, tr("Failed to send a file!"));
|
||||
}
|
||||
}
|
||||
|
||||
/// Send a file message
|
||||
Future<void> _sendFileMessage(BytesFile file) async {
|
||||
await _submitMessage(
|
||||
context,
|
||||
NewConversationMessage(
|
||||
conversationID: widget.conversationID,
|
||||
message: null,
|
||||
file: file,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/// Send a new text message
|
||||
Future<void> _submitTextMessage(BuildContext context, String content) async {
|
||||
if (await _submitMessage(
|
||||
context,
|
||||
NewConversationMessage(
|
||||
conversationID: widget.conversationID,
|
||||
message: content,
|
||||
)) ==
|
||||
Future<void> _submitTextMessage() async {
|
||||
if (await _submitMessage(NewConversationMessage(
|
||||
conversationID: widget.conversationID,
|
||||
message: textMessage,
|
||||
)) ==
|
||||
SendMessageResult.SUCCESS) _clearSendMessageForm();
|
||||
}
|
||||
|
||||
/// Submit a new message
|
||||
Future<SendMessageResult> _submitMessage(
|
||||
BuildContext context, NewConversationMessage message) async {
|
||||
NewConversationMessage message) async {
|
||||
//Send the message
|
||||
_setSending(true);
|
||||
final result = await _conversationsHelper.sendMessage(message);
|
||||
@ -368,7 +360,7 @@ class _ConversationScreenState extends SafeState<ConversationScreen> {
|
||||
? Theme.of(context).disabledColor
|
||||
: Theme.of(context).accentColor,
|
||||
),
|
||||
onPressed: () => _sendImage(context),
|
||||
onPressed: () => _sendFileMessage(),
|
||||
),
|
||||
),
|
||||
|
||||
@ -387,9 +379,7 @@ class _ConversationScreenState extends SafeState<ConversationScreen> {
|
||||
enabled: !_isSendingMessage,
|
||||
controller: _textEditingController,
|
||||
onChanged: (s) => setState(() {}),
|
||||
onSubmitted: _isMessageValid
|
||||
? (s) => _submitTextMessage(context, s)
|
||||
: null,
|
||||
onSubmitted: _isMessageValid ? (s) => _submitTextMessage() : null,
|
||||
decoration: new InputDecoration.collapsed(
|
||||
hintText: tr("Send a message"),
|
||||
),
|
||||
@ -407,8 +397,7 @@ class _ConversationScreenState extends SafeState<ConversationScreen> {
|
||||
: Theme.of(context).disabledColor,
|
||||
),
|
||||
onPressed: !_isSendingMessage && _isMessageValid
|
||||
? () =>
|
||||
_submitTextMessage(context, _textEditingController.text)
|
||||
? () => _submitTextMessage()
|
||||
: null,
|
||||
),
|
||||
),
|
||||
|
Reference in New Issue
Block a user