diff --git a/lib/main.dart b/lib/main.dart index 8abd4ff2..6aed1c6f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -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 { 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 { @override void dispose() { + MExtensionServerPlatform(ref).stopServer(); _linkSubscription?.cancel(); discordRpc?.destroy(); stopCfResolutionWebviewServer(); diff --git a/lib/services/m_extension_server.dart b/lib/services/m_extension_server.dart new file mode 100644 index 00000000..c6d68919 --- /dev/null +++ b/lib/services/m_extension_server.dart @@ -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 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 stopServer() async { + try { + await MExtensionServer().stopServer(); + } catch (_) {} + } +} diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index 6975de51..86534b3e 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -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); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 74a2c174..24c0c944 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -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 diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index eeb4a9b3..07772a9c 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -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")) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 263c041e..ac4e38a4 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -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 diff --git a/pubspec.lock b/pubspec.lock index 022531ac..f91cf9fa 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -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: diff --git a/pubspec.yaml b/pubspec.yaml index 2ff7923f..ea34b349 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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 diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index a1c69876..52d61056 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -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( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index f3839bc9..f0f9961f 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -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