feat: Enable audio message support for linux and windows

pull/1535/head
krille-chan 2 months ago
parent 583bf5f2da
commit 4465fa24d9
No known key found for this signature in database

@ -1,5 +1,6 @@
import 'dart:async';
import 'dart:io';
import 'dart:math';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
@ -334,7 +335,7 @@ class AudioPlayerState extends State<AudioPlayerWidget> {
? widget.color.withAlpha(128)
: Colors.transparent,
max: maxPosition,
value: currentPosition,
value: max(0, currentPosition),
onChanged: (position) => audioPlayer == null
? _startAction()
: audioPlayer.seek(

@ -13,7 +13,6 @@ import 'package:fluffychat/utils/matrix_sdk_extensions/matrix_locals.dart';
import 'package:fluffychat/widgets/avatar.dart';
import 'package:fluffychat/widgets/matrix.dart';
import '../../../config/app_config.dart';
import '../../../utils/platform_infos.dart';
import '../../../utils/url_launcher.dart';
import '../../bootstrap/bootstrap_dialog.dart';
import 'audio_player.dart';
@ -141,25 +140,15 @@ class MessageContent extends StatelessWidget {
case CuteEventContent.eventType:
return CuteContent(event);
case MessageTypes.Audio:
if (PlatformInfos.isMobile ||
PlatformInfos.isMacOS ||
PlatformInfos.isWeb
// Disabled until https://github.com/bleonard252/just_audio_mpv/issues/3
// is fixed
// || PlatformInfos.isLinux
) {
return AudioPlayerWidget(
event,
color: textColor,
fontSize: fontSize,
);
}
return MessageDownloadContent(event, textColor);
return AudioPlayerWidget(
event,
color: textColor,
fontSize: fontSize,
);
case MessageTypes.Video:
return EventVideoPlayer(event);
case MessageTypes.File:
return MessageDownloadContent(event, textColor);
case MessageTypes.Text:
case MessageTypes.Notice:
case MessageTypes.Emote:

@ -10,6 +10,7 @@ import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:http/http.dart' as http;
import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart';
import 'package:just_audio_media_kit/just_audio_media_kit.dart';
import 'package:matrix/encryption.dart';
import 'package:matrix/matrix.dart';
import 'package:provider/provider.dart';
@ -216,6 +217,10 @@ class MatrixState extends State<Matrix> with WidgetsBindingObserver {
super.initState();
WidgetsBinding.instance.addObserver(this);
initMatrix();
if (PlatformInfos.isLinux || PlatformInfos.isWindows) {
JustAudioMediaKit.ensureInitialized();
JustAudioMediaKit.title = AppConfig.applicationName;
}
if (PlatformInfos.isWeb) {
initConfig().then((_) => initSettings());
} else {

@ -25,6 +25,7 @@ packageLicenseOverride:
latlong2: Apache-2.0
platform_detect: Apache-2.0
rxdart: Apache-2.0
just_audio_media_kit: Apache-2.0
# flutter's internal packages
flutter_driver: BSD-3-Clause

@ -13,6 +13,7 @@
#include <flutter_secure_storage_linux/flutter_secure_storage_linux_plugin.h>
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
#include <handy_window/handy_window_plugin.h>
#include <media_kit_libs_linux/media_kit_libs_linux_plugin.h>
#include <pasteboard/pasteboard_plugin.h>
#include <record_linux/record_linux_plugin.h>
#include <sqlcipher_flutter_libs/sqlite3_flutter_libs_plugin.h>
@ -41,6 +42,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) handy_window_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "HandyWindowPlugin");
handy_window_plugin_register_with_registrar(handy_window_registrar);
g_autoptr(FlPluginRegistrar) media_kit_libs_linux_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "MediaKitLibsLinuxPlugin");
media_kit_libs_linux_plugin_register_with_registrar(media_kit_libs_linux_registrar);
g_autoptr(FlPluginRegistrar) pasteboard_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "PasteboardPlugin");
pasteboard_plugin_register_with_registrar(pasteboard_registrar);

@ -10,6 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_secure_storage_linux
flutter_webrtc
handy_window
media_kit_libs_linux
pasteboard
record_linux
sqlcipher_flutter_libs

@ -1018,6 +1018,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.9.41"
just_audio_media_kit:
dependency: "direct main"
description:
name: just_audio_media_kit
sha256: "9f3517213dfc7bbaf6980656feb66c35600f114c7efc0b5b3f4476cd5c18b45e"
url: "https://pub.dev"
source: hosted
version: "2.0.6"
just_audio_platform_interface:
dependency: transitive
description:
@ -1162,6 +1170,30 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.36.0"
media_kit:
dependency: transitive
description:
name: media_kit
sha256: "1f1deee148533d75129a6f38251ff8388e33ee05fc2d20a6a80e57d6051b7b62"
url: "https://pub.dev"
source: hosted
version: "1.1.11"
media_kit_libs_linux:
dependency: "direct main"
description:
name: media_kit_libs_linux
sha256: e186891c31daa6bedab4d74dcdb4e8adfccc7d786bfed6ad81fe24a3b3010310
url: "https://pub.dev"
source: hosted
version: "1.1.3"
media_kit_libs_windows_audio:
dependency: "direct main"
description:
name: media_kit_libs_windows_audio
sha256: c2fd558cc87b9d89a801141fcdffe02e338a3b21a41a18fbd63d5b221a1b8e53
url: "https://pub.dev"
source: hosted
version: "1.0.9"
meta:
dependency: transitive
description:
@ -1634,6 +1666,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.28.0"
safe_local_storage:
dependency: transitive
description:
name: safe_local_storage
sha256: ede4eb6cb7d88a116b3d3bf1df70790b9e2038bc37cb19112e381217c74d9440
url: "https://pub.dev"
source: hosted
version: "1.0.2"
safe_url_check:
dependency: transitive
description:
@ -2063,6 +2103,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.2.2"
universal_platform:
dependency: transitive
description:
name: universal_platform
sha256: "64e16458a0ea9b99260ceb5467a214c1f298d647c659af1bff6d3bf82536b1ec"
url: "https://pub.dev"
source: hosted
version: "1.1.0"
unorm_dart:
dependency: transitive
description:
@ -2071,6 +2119,14 @@ packages:
url: "https://pub.dev"
source: hosted
version: "0.2.0"
uri_parser:
dependency: transitive
description:
name: uri_parser
sha256: "6543c9fd86d2862fac55d800a43e67c0dcd1a41677cb69c2f8edfe73bbcf1835"
url: "https://pub.dev"
source: hosted
version: "2.0.2"
url_launcher:
dependency: "direct main"
description:

@ -60,9 +60,12 @@ dependencies:
image_picker: ^1.1.0
intl: any
just_audio: ^0.9.39
just_audio_media_kit: ^2.0.6
latlong2: ^0.9.1
linkify: ^5.0.0
matrix: ^0.36.0
media_kit_libs_linux: ^1.1.3
media_kit_libs_windows_audio: ^1.0.9
mime: ^1.0.6
native_imaging: ^0.1.1
opus_caf_converter_dart: ^1.0.1

@ -76,6 +76,7 @@ parts:
stage-packages:
- libsecret-1-0
- libjsoncpp25
- libmpv-dev
slots:
dbus-svc:

@ -13,6 +13,7 @@
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
#include <flutter_webrtc/flutter_web_r_t_c_plugin.h>
#include <geolocator_windows/geolocator_windows.h>
#include <media_kit_libs_windows_audio/media_kit_libs_windows_audio_plugin_c_api.h>
#include <pasteboard/pasteboard_plugin.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
#include <record_windows/record_windows_plugin_c_api.h>
@ -36,6 +37,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FlutterWebRTCPlugin"));
GeolocatorWindowsRegisterWithRegistrar(
registry->GetRegistrarForPlugin("GeolocatorWindows"));
MediaKitLibsWindowsAudioPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("MediaKitLibsWindowsAudioPluginCApi"));
PasteboardPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("PasteboardPlugin"));
PermissionHandlerWindowsPluginRegisterWithRegistrar(

@ -10,6 +10,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_secure_storage_windows
flutter_webrtc
geolocator_windows
media_kit_libs_windows_audio
pasteboard
permission_handler_windows
record_windows

Loading…
Cancel
Save