feat(server): integrate MExtensionServer

This commit is contained in:
Moustapha Kodjo Amadou 2025-12-08 15:14:12 +01:00
parent 85ff4d7d4c
commit 1b708d6884
10 changed files with 61 additions and 0 deletions

View file

@ -33,6 +33,7 @@ import 'package:mangayomi/modules/more/settings/appearance/providers/theme_mode_
import 'package:mangayomi/l10n/generated/app_localizations.dart';
import 'package:mangayomi/services/http/m_client.dart';
import 'package:mangayomi/services/isolate_service.dart';
import 'package:mangayomi/services/m_extension_server.dart';
import 'package:mangayomi/src/rust/frb_generated.dart';
import 'package:mangayomi/utils/discord_rpc.dart';
import 'package:mangayomi/utils/log/logger.dart';
@ -118,6 +119,7 @@ class _MyAppState extends ConsumerState<MyApp> {
unawaited(ref.read(scanLocalLibraryProvider.future));
WidgetsBinding.instance.addPostFrameCallback((_) {
MExtensionServerPlatform(ref).startServer();
if (ref.read(clearChapterCacheOnAppLaunchStateProvider)) {
// Watch before calling clearcache to keep it alive, so that _getTotalDiskSpace completes safely
ref.watch(totalChapterCacheSizeStateProvider);
@ -157,6 +159,7 @@ class _MyAppState extends ConsumerState<MyApp> {
@override
void dispose() {
MExtensionServerPlatform(ref).stopServer();
_linkSubscription?.cancel();
discordRpc?.destroy();
stopCfResolutionWebviewServer();

View file

@ -0,0 +1,28 @@
import 'dart:io';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:m_extension_server/m_extension_server.dart';
import 'package:mangayomi/modules/more/settings/browse/providers/browse_state_provider.dart';
class MExtensionServerPlatform {
WidgetRef ref;
MExtensionServerPlatform(this.ref);
Future<void> startServer() async {
try {
final server = await HttpServer.bind(InternetAddress.loopbackIPv4, 0);
final port = server.port;
await server.close();
await MExtensionServer().startServer(port);
ref
.read(androidProxyServerStateProvider.notifier)
.set("http://127.0.0.1:$port");
} catch (_) {}
}
Future<void> stopServer() async {
try {
await MExtensionServer().stopServer();
} catch (_) {}
}
}

View file

@ -10,6 +10,7 @@
#include <flutter_qjs/flutter_qjs_plugin.h>
#include <gtk/gtk_plugin.h>
#include <isar_community_flutter_libs/isar_flutter_libs_plugin.h>
#include <m_extension_server/m_extension_server_plugin.h>
#include <media_kit_libs_linux/media_kit_libs_linux_plugin.h>
#include <media_kit_video/media_kit_video_plugin.h>
#include <screen_retriever_linux/screen_retriever_linux_plugin.h>
@ -31,6 +32,9 @@ void fl_register_plugins(FlPluginRegistry* registry) {
g_autoptr(FlPluginRegistrar) isar_community_flutter_libs_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "IsarFlutterLibsPlugin");
isar_flutter_libs_plugin_register_with_registrar(isar_community_flutter_libs_registrar);
g_autoptr(FlPluginRegistrar) m_extension_server_registrar =
fl_plugin_registry_get_registrar_for_plugin(registry, "MExtensionServerPlugin");
m_extension_server_plugin_register_with_registrar(m_extension_server_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);

View file

@ -7,6 +7,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_qjs
gtk
isar_community_flutter_libs
m_extension_server
media_kit_libs_linux
media_kit_video
screen_retriever_linux

View file

@ -13,6 +13,7 @@ import flutter_inappwebview_macos
import flutter_qjs
import flutter_web_auth_2
import isar_community_flutter_libs
import m_extension_server
import media_kit_libs_macos_video
import media_kit_video
import package_info_plus
@ -35,6 +36,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FlutterQjsPlugin.register(with: registry.registrar(forPlugin: "FlutterQjsPlugin"))
FlutterWebAuth2Plugin.register(with: registry.registrar(forPlugin: "FlutterWebAuth2Plugin"))
IsarFlutterLibsPlugin.register(with: registry.registrar(forPlugin: "IsarFlutterLibsPlugin"))
MExtensionServerPlugin.register(with: registry.registrar(forPlugin: "MExtensionServerPlugin"))
MediaKitLibsMacosVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitLibsMacosVideoPlugin"))
MediaKitVideoPlugin.register(with: registry.registrar(forPlugin: "MediaKitVideoPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))

View file

@ -19,6 +19,8 @@ PODS:
- FlutterMacOS (1.0.0)
- isar_community_flutter_libs (1.0.0):
- FlutterMacOS
- m_extension_server (0.0.1):
- FlutterMacOS
- media_kit_libs_macos_video (1.0.4):
- FlutterMacOS
- media_kit_video (0.0.1):
@ -59,6 +61,7 @@ DEPENDENCIES:
- flutter_web_auth_2 (from `Flutter/ephemeral/.symlinks/plugins/flutter_web_auth_2/macos`)
- FlutterMacOS (from `Flutter/ephemeral`)
- isar_community_flutter_libs (from `Flutter/ephemeral/.symlinks/plugins/isar_community_flutter_libs/macos`)
- m_extension_server (from `Flutter/ephemeral/.symlinks/plugins/m_extension_server/macos`)
- media_kit_libs_macos_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos`)
- media_kit_video (from `Flutter/ephemeral/.symlinks/plugins/media_kit_video/macos`)
- package_info_plus (from `Flutter/ephemeral/.symlinks/plugins/package_info_plus/macos`)
@ -98,6 +101,8 @@ EXTERNAL SOURCES:
:path: Flutter/ephemeral
isar_community_flutter_libs:
:path: Flutter/ephemeral/.symlinks/plugins/isar_community_flutter_libs/macos
m_extension_server:
:path: Flutter/ephemeral/.symlinks/plugins/m_extension_server/macos
media_kit_libs_macos_video:
:path: Flutter/ephemeral/.symlinks/plugins/media_kit_libs_macos_video/macos
media_kit_video:
@ -136,6 +141,7 @@ SPEC CHECKSUMS:
flutter_web_auth_2: 62b08da29f15a20fa63f144234622a1488d45b65
FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1
isar_community_flutter_libs: a631ceb5622413b56bcd0a8bf49cb55bf3d8bb2b
m_extension_server: 50e95a61bbf93c9a33ddc812d0753bddf1c01456
media_kit_libs_macos_video: 85a23e549b5f480e72cae3e5634b5514bc692f65
media_kit_video: fa6564e3799a0a28bff39442334817088b7ca758
OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94

View file

@ -978,6 +978,15 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.3.0"
m_extension_server:
dependency: "direct main"
description:
path: "."
ref: master
resolved-ref: dd07e87603cc2d6cb3fc42c37def4396741c4944
url: "https://github.com/kodjodevf/m_extension_server.git"
source: git
version: "0.0.1"
marquee:
dependency: "direct main"
description:

View file

@ -99,6 +99,10 @@ dependencies:
url: https://github.com/Schnitzel5/flutter-discord-rpc.git
ref: main
table_calendar: ^3.2.0
m_extension_server:
git:
url: https://github.com/kodjodevf/m_extension_server.git
ref: master
dependency_overrides:
ffi: ^2.1.3

View file

@ -11,6 +11,7 @@
#include <flutter_inappwebview_windows/flutter_inappwebview_windows_plugin_c_api.h>
#include <flutter_qjs/flutter_qjs_plugin.h>
#include <isar_community_flutter_libs/isar_flutter_libs_plugin.h>
#include <m_extension_server/m_extension_server_plugin_c_api.h>
#include <media_kit_libs_windows_video/media_kit_libs_windows_video_plugin_c_api.h>
#include <media_kit_video/media_kit_video_plugin_c_api.h>
#include <permission_handler_windows/permission_handler_windows_plugin.h>
@ -33,6 +34,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
registry->GetRegistrarForPlugin("FlutterQjsPlugin"));
IsarFlutterLibsPluginRegisterWithRegistrar(
registry->GetRegistrarForPlugin("IsarFlutterLibsPlugin"));
MExtensionServerPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("MExtensionServerPluginCApi"));
MediaKitLibsWindowsVideoPluginCApiRegisterWithRegistrar(
registry->GetRegistrarForPlugin("MediaKitLibsWindowsVideoPluginCApi"));
MediaKitVideoPluginCApiRegisterWithRegistrar(

View file

@ -8,6 +8,7 @@ list(APPEND FLUTTER_PLUGIN_LIST
flutter_inappwebview_windows
flutter_qjs
isar_community_flutter_libs
m_extension_server
media_kit_libs_windows_video
media_kit_video
permission_handler_windows