import 'package:app_business/service/api.dart'; import 'package:track_common/model.dart'; import 'package:track_common/service/map_watch.dart'; import '../generated/base.pb.dart' as pb; import '../model/game_map.dart'; class MapWatchImpl extends MapWatch { MapWatchImpl({required super.id}); ApiService get _api => Get.find(); @override Future> getEventList(int mapId) async { final r = await _api.stub .toUserDetailQueryV2(pb.ToUserDetailQueryRequestV2()..mapId = mapId); final eventList = []; for (var one in r.list) { eventList.add(EventOnMap() ..info.id = one.actId ..userList = one.userList.map((e) => toAppPlayer(e)).toList()); } return eventList; } PlayerOnMap toAppPlayer(pb.ToOrienteerInGameInfo e) { final save = e.gameSaveInfo; final startAt = save.hasStartAt() ? save.startAt.toModel() : DateTime.now(); return PlayerOnMap() ..info.id = e.userId ..startAt = startAt ..duration = DateTime.now().difference(startAt) ..distance = e.gpsInfo.distance.meter ..cpListChecked = save.checkedSortedList.isEmpty ? [] : save.checkedSortedList .map((e) => ControlPoint() ..isSuccess = e.isCheckSuccess ..intId = e.controlPointId.toInt64()) .toList(); } @override Future getEventInfo(int id) async { final r = await _api.stub.toActionBasicQuery(IdRequest()..id = Int64(id)); final event = EventInfo() ..name = r.actName ..cpAllCount = r.totalControlNum; return event; } @override Future getPlayerInfo(int eventId, int userId) async { final r = await _api.stub .toUserInActionBasicQuery(pb.ToUserInActionBasicQueryRequest() ..actId = eventId ..userId = userId); final player = PlayerInfo() ..id = r.userId ..name = r.baseInfo.name ..routeName = r.courseBaseInfo.courseName ..cpWantList = r.courseBaseInfo.controlPointSortedList .map((e) => e.toModel()) .toList(); for (var (i, cp) in player.cpWantList.indexed) { cp.sn = i.toString(); } return player; } } class MapWatchServiceImpl extends MapWatchService { ApiService get _api => Get.find(); @override Future newInstanceByMap(MapInfo info) async { final r = await _api.stub.toMapDetailV2(pb.IdRequest()..id = Int64(info.id)); final instance = MapWatchImpl(id: info.id) ..name = r.mapName ..plugMap.gameMap = r.zipImage.toGameMap(); return instance; } }