/* Copyright (C) 2024 Damien Gaignon, Martin.JM This file is part of Gadgetbridge. Gadgetbridge is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. Gadgetbridge is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . */ package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Arrays; import java.util.List; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket; import nodomain.freeyourgadget.gadgetbridge.devices.huawei.packets.Workout; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiSupportProvider; import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.HuaweiWorkoutGbParser; public class GetWorkoutPaceRequest extends Request { private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutPaceRequest.class); Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers; List remainder; short number; Long databaseId; public GetWorkoutPaceRequest(HuaweiSupportProvider support, Workout.WorkoutCount.Response.WorkoutNumbers workoutNumbers, List remainder, short number, Long databaseId) { super(support); this.serviceId = Workout.id; this.commandId = Workout.WorkoutPace.id; this.workoutNumbers = workoutNumbers; this.remainder = remainder; this.number = number; this.databaseId = databaseId; } @Override protected List createRequest() throws RequestCreationException { try { return new Workout.WorkoutPace.Request(paramsProvider,this.workoutNumbers.workoutNumber, this.number).serialize(); } catch (HuaweiPacket.CryptoException e) { throw new RequestCreationException(e); } } @Override protected void processResponse() throws ResponseParseException { if (!(receivedPacket instanceof Workout.WorkoutPace.Response)) throw new ResponseTypeMismatchException(receivedPacket, Workout.WorkoutPace.Response.class); Workout.WorkoutPace.Response packet = (Workout.WorkoutPace.Response) receivedPacket; if (packet.workoutNumber != this.workoutNumbers.workoutNumber) throw new WorkoutParseException("Incorrect workout number!"); if (packet.paceNumber != this.number) throw new WorkoutParseException("Incorrect pace number!"); LOG.info("Workout {} pace {}:", this.workoutNumbers.workoutNumber, this.number); LOG.info("Workout : " + packet.workoutNumber); LOG.info("Pace : " + packet.paceNumber); LOG.info("Block num: " + packet.blocks.size()); LOG.info("Blocks : " + Arrays.toString(packet.blocks.toArray())); supportProvider.addWorkoutPaceData(this.databaseId, packet.blocks); if (this.workoutNumbers.paceCount > this.number + 1) { GetWorkoutPaceRequest nextRequest = new GetWorkoutPaceRequest( this.supportProvider, this.workoutNumbers, this.remainder, (short) (this.number + 1), this.databaseId ); nextRequest.setFinalizeReq(this.finalizeReq); this.nextRequest(nextRequest); } else { HuaweiWorkoutGbParser.parseWorkout(this.databaseId); if (remainder.size() > 0) { GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest( this.supportProvider, remainder.remove(0), remainder ); nextRequest.setFinalizeReq(this.finalizeReq); this.nextRequest(nextRequest); } } } }