From d1ec932ffff6db9b4e2165958cc82941c551c4e7 Mon Sep 17 00:00:00 2001 From: problematicconsumer Date: Fri, 1 Dec 2023 14:22:00 +0330 Subject: [PATCH] Fix status mapper --- .../kotlin/com/hiddify/hiddify/EventHandler.kt | 5 +++-- lib/singbox/model/singbox_status.dart | 2 ++ .../service/platform_singbox_service.dart | 18 ++++++------------ 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/android/app/src/main/kotlin/com/hiddify/hiddify/EventHandler.kt b/android/app/src/main/kotlin/com/hiddify/hiddify/EventHandler.kt index cf5717ad..95a58b42 100644 --- a/android/app/src/main/kotlin/com/hiddify/hiddify/EventHandler.kt +++ b/android/app/src/main/kotlin/com/hiddify/hiddify/EventHandler.kt @@ -6,6 +6,7 @@ import com.hiddify.hiddify.constant.Alert import com.hiddify.hiddify.constant.Status import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.plugin.common.EventChannel +import io.flutter.plugin.common.JSONMethodCodec class EventHandler : FlutterPlugin { @@ -22,8 +23,8 @@ class EventHandler : FlutterPlugin { private var alertsObserver: Observer? = null override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { - statusChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_STATUS) - alertsChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_ALERTS) + statusChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_STATUS, JSONMethodCodec.INSTANCE) + alertsChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_ALERTS, JSONMethodCodec.INSTANCE) statusChannel!!.setStreamHandler(object : EventChannel.StreamHandler { override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { diff --git a/lib/singbox/model/singbox_status.dart b/lib/singbox/model/singbox_status.dart index 88d9d1cc..04751b7a 100644 --- a/lib/singbox/model/singbox_status.dart +++ b/lib/singbox/model/singbox_status.dart @@ -26,6 +26,8 @@ sealed class SingboxStatus with _$SingboxStatus { (e) => alertStr?.toLowerCase() == e.name.toLowerCase(), ); return SingboxStatus.stopped(alert: alert, message: messageStr); + case {"status": "Stopped"}: + return const SingboxStatus.stopped(); case {"status": "Starting"}: return const SingboxStarting(); case {"status": "Started"}: diff --git a/lib/singbox/service/platform_singbox_service.dart b/lib/singbox/service/platform_singbox_service.dart index 52cb7f66..7ed3b131 100644 --- a/lib/singbox/service/platform_singbox_service.dart +++ b/lib/singbox/service/platform_singbox_service.dart @@ -14,9 +14,9 @@ import 'package:rxdart/rxdart.dart'; class PlatformSingboxService with InfraLogger implements SingboxService { late final _methodChannel = const MethodChannel("com.hiddify.app/method"); late final _statusChannel = - const EventChannel("com.hiddify.app/service.status"); + const EventChannel("com.hiddify.app/service.status", JSONMethodCodec()); late final _alertsChannel = - const EventChannel("com.hiddify.app/service.alerts"); + const EventChannel("com.hiddify.app/service.alerts", JSONMethodCodec()); late final _logsChannel = const EventChannel("com.hiddify.app/service.logs"); late final ValueStream _status; @@ -24,16 +24,10 @@ class PlatformSingboxService with InfraLogger implements SingboxService { @override Future init() async { loggy.debug("initializing"); - final status = _statusChannel.receiveBroadcastStream().map( - (event) { - return SingboxStatus.fromEvent(event); - }, - ); - final alerts = _alertsChannel.receiveBroadcastStream().map( - (event) { - return SingboxStatus.fromEvent(event); - }, - ); + final status = + _statusChannel.receiveBroadcastStream().map(SingboxStatus.fromEvent); + final alerts = + _alertsChannel.receiveBroadcastStream().map(SingboxStatus.fromEvent); _status = ValueConnectableStream(Rx.merge([status, alerts])).autoConnect(); await _status.first; }