import 'package:fpdart/fpdart.dart'; import 'package:umbrix/core/utils/exception_handler.dart'; import 'package:umbrix/features/stats/model/stats_entity.dart'; import 'package:umbrix/features/stats/model/stats_failure.dart'; import 'package:umbrix/singbox/service/singbox_service.dart'; import 'package:umbrix/utils/custom_loggers.dart'; abstract interface class StatsRepository { Stream> watchStats(); } class StatsRepositoryImpl with ExceptionHandler, InfraLogger implements StatsRepository { StatsRepositoryImpl({required this.singbox}); final SingboxService singbox; @override Stream> watchStats() { return singbox .watchStats() .map( (event) => StatsEntity( uplink: event.uplink, downlink: event.downlink, uplinkTotal: event.uplinkTotal, downlinkTotal: event.downlinkTotal, ), ) .handleExceptions(StatsUnexpectedFailure.new); } }