Fix status mapper
This commit is contained in:
@@ -6,6 +6,7 @@ import com.hiddify.hiddify.constant.Alert
|
|||||||
import com.hiddify.hiddify.constant.Status
|
import com.hiddify.hiddify.constant.Status
|
||||||
import io.flutter.embedding.engine.plugins.FlutterPlugin
|
import io.flutter.embedding.engine.plugins.FlutterPlugin
|
||||||
import io.flutter.plugin.common.EventChannel
|
import io.flutter.plugin.common.EventChannel
|
||||||
|
import io.flutter.plugin.common.JSONMethodCodec
|
||||||
|
|
||||||
class EventHandler : FlutterPlugin {
|
class EventHandler : FlutterPlugin {
|
||||||
|
|
||||||
@@ -22,8 +23,8 @@ class EventHandler : FlutterPlugin {
|
|||||||
private var alertsObserver: Observer<ServiceEvent?>? = null
|
private var alertsObserver: Observer<ServiceEvent?>? = null
|
||||||
|
|
||||||
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
|
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
|
||||||
statusChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_STATUS)
|
statusChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_STATUS, JSONMethodCodec.INSTANCE)
|
||||||
alertsChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_ALERTS)
|
alertsChannel = EventChannel(flutterPluginBinding.binaryMessenger, SERVICE_ALERTS, JSONMethodCodec.INSTANCE)
|
||||||
|
|
||||||
statusChannel!!.setStreamHandler(object : EventChannel.StreamHandler {
|
statusChannel!!.setStreamHandler(object : EventChannel.StreamHandler {
|
||||||
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
|
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
|
||||||
|
|||||||
@@ -26,6 +26,8 @@ sealed class SingboxStatus with _$SingboxStatus {
|
|||||||
(e) => alertStr?.toLowerCase() == e.name.toLowerCase(),
|
(e) => alertStr?.toLowerCase() == e.name.toLowerCase(),
|
||||||
);
|
);
|
||||||
return SingboxStatus.stopped(alert: alert, message: messageStr);
|
return SingboxStatus.stopped(alert: alert, message: messageStr);
|
||||||
|
case {"status": "Stopped"}:
|
||||||
|
return const SingboxStatus.stopped();
|
||||||
case {"status": "Starting"}:
|
case {"status": "Starting"}:
|
||||||
return const SingboxStarting();
|
return const SingboxStarting();
|
||||||
case {"status": "Started"}:
|
case {"status": "Started"}:
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import 'package:rxdart/rxdart.dart';
|
|||||||
class PlatformSingboxService with InfraLogger implements SingboxService {
|
class PlatformSingboxService with InfraLogger implements SingboxService {
|
||||||
late final _methodChannel = const MethodChannel("com.hiddify.app/method");
|
late final _methodChannel = const MethodChannel("com.hiddify.app/method");
|
||||||
late final _statusChannel =
|
late final _statusChannel =
|
||||||
const EventChannel("com.hiddify.app/service.status");
|
const EventChannel("com.hiddify.app/service.status", JSONMethodCodec());
|
||||||
late final _alertsChannel =
|
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 _logsChannel = const EventChannel("com.hiddify.app/service.logs");
|
||||||
|
|
||||||
late final ValueStream<SingboxStatus> _status;
|
late final ValueStream<SingboxStatus> _status;
|
||||||
@@ -24,16 +24,10 @@ class PlatformSingboxService with InfraLogger implements SingboxService {
|
|||||||
@override
|
@override
|
||||||
Future<void> init() async {
|
Future<void> init() async {
|
||||||
loggy.debug("initializing");
|
loggy.debug("initializing");
|
||||||
final status = _statusChannel.receiveBroadcastStream().map(
|
final status =
|
||||||
(event) {
|
_statusChannel.receiveBroadcastStream().map(SingboxStatus.fromEvent);
|
||||||
return SingboxStatus.fromEvent(event);
|
final alerts =
|
||||||
},
|
_alertsChannel.receiveBroadcastStream().map(SingboxStatus.fromEvent);
|
||||||
);
|
|
||||||
final alerts = _alertsChannel.receiveBroadcastStream().map(
|
|
||||||
(event) {
|
|
||||||
return SingboxStatus.fromEvent(event);
|
|
||||||
},
|
|
||||||
);
|
|
||||||
_status = ValueConnectableStream(Rx.merge([status, alerts])).autoConnect();
|
_status = ValueConnectableStream(Rx.merge([status, alerts])).autoConnect();
|
||||||
await _status.first;
|
await _status.first;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user