Merge branch 'main' of krille-chan/fluffychat

This commit is contained in:
Alexey 2026-03-25 14:39:04 +03:00
commit b93b263427
200 changed files with 1285 additions and 943 deletions

View file

@ -1,21 +1,11 @@
import 'dart:async';
import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:collection/collection.dart';
import 'package:desktop_drop/desktop_drop.dart';
import 'package:device_info_plus/device_info_plus.dart';
import 'package:emoji_picker_flutter/emoji_picker_flutter.dart';
import 'package:file_picker/file_picker.dart';
import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
import 'package:pasteboard/pasteboard.dart';
import 'package:fluffychat/config/setting_keys.dart';
import 'package:fluffychat/config/themes.dart';
import 'package:fluffychat/l10n/l10n.dart';
@ -38,6 +28,16 @@ import 'package:fluffychat/widgets/adaptive_dialogs/show_text_input_dialog.dart'
import 'package:fluffychat/widgets/future_loading_dialog.dart';
import 'package:fluffychat/widgets/matrix.dart';
import 'package:fluffychat/widgets/share_scaffold_dialog.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:go_router/go_router.dart';
import 'package:image_picker/image_picker.dart';
import 'package:matrix/matrix.dart';
import 'package:mime/mime.dart';
import 'package:pasteboard/pasteboard.dart';
import 'package:scroll_to_index/scroll_to_index.dart';
import '../../utils/account_bundles.dart';
import '../../utils/localized_exception_extension.dart';
import 'send_file_dialog.dart';
@ -554,6 +554,7 @@ class ChatController extends State<ChatPageWithRoom>
timeline?.cancelSubscriptions();
timeline = null;
inputFocus.removeListener(_inputFocusListener);
if (currentlyTyping) room.setTyping(false);
super.dispose();
}
@ -706,7 +707,7 @@ class ChatController extends State<ChatPageWithRoom>
String path,
int duration,
List<int> waveform,
String? fileName,
String fileName,
) async {
final scaffoldMessenger = ScaffoldMessenger.of(context);
final audioFile = XFile(path);
@ -718,9 +719,17 @@ class ChatController extends State<ChatPageWithRoom>
final bytes = bytesResult.result;
if (bytes == null) return;
final mimeType = lookupMimeType(fileName, headerBytes: bytes);
final extension = mimeType == null ? null : extensionFromMime(mimeType);
if (extension != null) {
fileName =
'voice_message_${DateTime.now().millisecondsSinceEpoch}.$extension';
}
final file = MatrixAudioFile(
bytes: bytes,
name: fileName ?? audioFile.path,
name: fileName,
mimeType: mimeType,
);
room
@ -1298,6 +1307,7 @@ class ChatController extends State<ChatPageWithRoom>
if (AppSettings.sendTypingNotifications.value) {
typingCoolDown?.cancel();
typingCoolDown = Timer(const Duration(seconds: 2), () {
if (!mounted) return;
typingCoolDown = null;
currentlyTyping = false;
room.setTyping(false);