mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2026-07-31 07:44:24 +02:00
Huawei: Basic errors handling on workouts data sync
This commit is contained in:
+51
-1
@@ -21,7 +21,6 @@ import androidx.annotation.NonNull;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
import nodomain.freeyourgadget.gadgetbridge.devices.huawei.HuaweiPacket;
|
||||
@@ -71,12 +70,19 @@ public class Workout {
|
||||
public short count;
|
||||
public List<WorkoutNumbers> workoutNumbers;
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public Response(ParamsProvider paramsProvider) {
|
||||
super(paramsProvider);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
this.count = 0;
|
||||
return;
|
||||
}
|
||||
HuaweiTLV container = this.tlv.getObject(0x81);
|
||||
|
||||
this.count = container.getShort(0x02);
|
||||
@@ -129,6 +135,8 @@ public class Workout {
|
||||
public static class Response extends HuaweiPacket {
|
||||
public byte[] rawData;
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short number;
|
||||
public byte status = -1; // TODO: enum?
|
||||
public int startTime;
|
||||
@@ -192,6 +200,11 @@ public class Workout {
|
||||
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
HuaweiTLV container = this.tlv.getObject(0x81);
|
||||
|
||||
this.rawData = container.serialize();
|
||||
@@ -422,6 +435,8 @@ public class Workout {
|
||||
private final byte[] bitmapLengths = {1, 2, 1, 2, 2, 4, -1, 2, 2, 2};
|
||||
private final byte[] innerBitmapLengths = {2, 2, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 1, 2};
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short workoutNumber;
|
||||
public short dataNumber;
|
||||
public byte[] rawHeader;
|
||||
@@ -449,6 +464,12 @@ public class Workout {
|
||||
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
HuaweiTLV container = this.tlv.getObject(0x81);
|
||||
|
||||
this.workoutNumber = container.getShort(0x02);
|
||||
@@ -682,6 +703,8 @@ public class Workout {
|
||||
}
|
||||
}
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short workoutNumber;
|
||||
public short paceNumber;
|
||||
public List<Block> blocks;
|
||||
@@ -692,6 +715,12 @@ public class Workout {
|
||||
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
HuaweiTLV container = this.tlv.getObject(0x81);
|
||||
|
||||
this.workoutNumber = container.getShort(0x02);
|
||||
@@ -767,6 +796,9 @@ public class Workout {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short workoutNumber;
|
||||
public short segmentNumber;
|
||||
public List<Block> blocks;
|
||||
@@ -777,6 +809,11 @@ public class Workout {
|
||||
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
HuaweiTLV container = this.tlv.getObject(0x81);
|
||||
|
||||
this.workoutNumber = container.getShort(0x02);
|
||||
@@ -846,6 +883,8 @@ public class Workout {
|
||||
}
|
||||
}
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short spO2Number1; //TODO: meaning of this field
|
||||
public short spO2Number2; //TODO: meaning of this field
|
||||
public List<Block> blocks;
|
||||
@@ -857,6 +896,10 @@ public class Workout {
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
this.spO2Number1 = this.tlv.getShort(0x01);
|
||||
this.spO2Number2 = this.tlv.getShort(0x02);
|
||||
@@ -986,6 +1029,8 @@ public class Workout {
|
||||
}
|
||||
}
|
||||
|
||||
public Integer error = null;
|
||||
|
||||
public short workoutId;
|
||||
public short number; //TODO: meaning of this field
|
||||
public List<Block> blocks;
|
||||
@@ -997,6 +1042,11 @@ public class Workout {
|
||||
@Override
|
||||
public void parseTlv() throws ParseException {
|
||||
|
||||
if (this.tlv.contains(0x7f)) {
|
||||
error = this.tlv.getAsInteger(0x7f);
|
||||
return;
|
||||
}
|
||||
|
||||
this.workoutId = this.tlv.getShort(0x01);
|
||||
this.number = this.tlv.getShort(0x02);
|
||||
|
||||
|
||||
+21
@@ -143,6 +143,7 @@ import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetN
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetOTAChangeLog;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetSmartAlarmList;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetWatchfaceParams;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.GetWorkoutTotalsRequest;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendCameraRemoteSetupEvent;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendDeviceReportThreshold;
|
||||
import nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests.SendExtendedAccountRequest;
|
||||
@@ -2859,6 +2860,26 @@ public class HuaweiSupportProvider {
|
||||
return true;
|
||||
}
|
||||
|
||||
public void nextWorkoutSync(List<Workout.WorkoutCount.Response.WorkoutNumbers> remainder, RequestCallback finalizeReq) {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
this,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new Request.ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
this.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void endOfWorkoutSync() {
|
||||
this.syncState.setWorkoutSync(false);
|
||||
}
|
||||
|
||||
+9
-2
@@ -81,6 +81,15 @@ public class GetWorkoutCountRequest extends Request {
|
||||
|
||||
Workout.WorkoutCount.Response packet = (Workout.WorkoutCount.Response) receivedPacket;
|
||||
|
||||
if (packet.count == 0 || packet.workoutNumbers == null || packet.error != null) {
|
||||
if(packet.error != null) {
|
||||
LOG.warn("Error occurred during workout sync: {}", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
}
|
||||
this.supportProvider.endOfWorkoutSync();
|
||||
return;
|
||||
}
|
||||
|
||||
if (packet.count > packet.workoutNumbers.size()) {
|
||||
LOG.warn("Packet count is greater than workoutNumbers size: {} > {}", packet.count, packet.workoutNumbers.size());
|
||||
GB.toast("Workout count mismatch, after this sync is complete, try synchronising again", Toast.LENGTH_LONG, GB.WARN);
|
||||
@@ -104,8 +113,6 @@ public class GetWorkoutCountRequest extends Request {
|
||||
);
|
||||
nextRequest.setFinalizeReq(this.finalizeReq);
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
this.supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-22
@@ -16,10 +16,11 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -27,6 +28,7 @@ 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;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
|
||||
public class GetWorkoutPaceRequest extends Request {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutPaceRequest.class);
|
||||
@@ -65,6 +67,13 @@ public class GetWorkoutPaceRequest extends Request {
|
||||
|
||||
Workout.WorkoutPace.Response packet = (Workout.WorkoutPace.Response) receivedPacket;
|
||||
|
||||
if (packet.error != null) {
|
||||
LOG.warn("Error {} occurred during workout pace sync. ignoring", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
supportProvider.nextWorkoutSync(remainder, GetWorkoutPaceRequest.this.finalizeReq);
|
||||
return;
|
||||
}
|
||||
|
||||
if (packet.workoutNumber != this.workoutNumbers.workoutNumber)
|
||||
throw new WorkoutParseException("Incorrect workout number!");
|
||||
|
||||
@@ -121,27 +130,7 @@ public class GetWorkoutPaceRequest extends Request {
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
GetWorkoutPaceRequest.this.supportProvider,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(GetWorkoutPaceRequest.this.finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
});
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, () -> supportProvider.nextWorkoutSync(remainder, GetWorkoutPaceRequest.this.finalizeReq));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+11
-22
@@ -16,10 +16,11 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -27,6 +28,7 @@ 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;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
|
||||
public class GetWorkoutSectionsRequest extends Request {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutSectionsRequest.class);
|
||||
@@ -65,6 +67,13 @@ public class GetWorkoutSectionsRequest extends Request {
|
||||
|
||||
Workout.WorkoutSections.Response packet = (Workout.WorkoutSections.Response) receivedPacket;
|
||||
|
||||
if (packet.error != null) {
|
||||
LOG.warn("Error {} occurred during workout swim segments sync. ignoring", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
supportProvider.nextWorkoutSync(remainder, GetWorkoutSectionsRequest.this.finalizeReq);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
LOG.info("Workout {} section {}:", this.workoutNumbers.workoutNumber, this.number);
|
||||
LOG.info("workoutId : {}", packet.workoutId);
|
||||
@@ -86,27 +95,7 @@ public class GetWorkoutSectionsRequest extends Request {
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
GetWorkoutSectionsRequest.this.supportProvider,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(GetWorkoutSectionsRequest.this.finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
});
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, () -> supportProvider.nextWorkoutSync(remainder, GetWorkoutSectionsRequest.this.finalizeReq));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+10
-22
@@ -16,10 +16,11 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -27,6 +28,7 @@ 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;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
|
||||
public class GetWorkoutSpO2Request extends Request {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutSpO2Request.class);
|
||||
@@ -65,6 +67,12 @@ public class GetWorkoutSpO2Request extends Request {
|
||||
|
||||
Workout.WorkoutSpO2.Response packet = (Workout.WorkoutSpO2.Response) receivedPacket;
|
||||
|
||||
if (packet.error != null) {
|
||||
LOG.warn("Error {} occurred during workout swim segments sync. ignoring", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
supportProvider.nextWorkoutSync(remainder, GetWorkoutSpO2Request.this.finalizeReq);
|
||||
return;
|
||||
}
|
||||
|
||||
LOG.info("Workout {} current {}:", this.workoutNumbers.workoutNumber, this.number);
|
||||
LOG.info("spO2Number1: {}", packet.spO2Number1);
|
||||
@@ -96,27 +104,7 @@ public class GetWorkoutSpO2Request extends Request {
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
GetWorkoutSpO2Request.this.supportProvider,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(GetWorkoutSpO2Request.this.finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
});
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, () -> supportProvider.nextWorkoutSync(remainder, GetWorkoutSpO2Request.this.finalizeReq));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+11
-22
@@ -16,10 +16,11 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
@@ -27,6 +28,7 @@ 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;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
|
||||
public class GetWorkoutSwimSegmentsRequest extends Request {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutSwimSegmentsRequest.class);
|
||||
@@ -65,6 +67,13 @@ public class GetWorkoutSwimSegmentsRequest extends Request {
|
||||
|
||||
Workout.WorkoutSwimSegments.Response packet = (Workout.WorkoutSwimSegments.Response) receivedPacket;
|
||||
|
||||
if (packet.error != null) {
|
||||
LOG.warn("Error {} occurred during workout swim segments sync. ignoring", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
supportProvider.nextWorkoutSync(remainder, GetWorkoutSwimSegmentsRequest.this.finalizeReq);
|
||||
return;
|
||||
}
|
||||
|
||||
if (packet.workoutNumber != this.workoutNumbers.workoutNumber)
|
||||
throw new WorkoutParseException("Incorrect workout number!");
|
||||
|
||||
@@ -111,27 +120,7 @@ public class GetWorkoutSwimSegmentsRequest extends Request {
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
GetWorkoutSwimSegmentsRequest.this.supportProvider,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(GetWorkoutSwimSegmentsRequest.this.finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
});
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, this.databaseId, () -> supportProvider.nextWorkoutSync(remainder, GetWorkoutSwimSegmentsRequest.this.finalizeReq));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+12
-22
@@ -16,16 +16,18 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei.requests;
|
||||
|
||||
import android.widget.Toast;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
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;
|
||||
import nodomain.freeyourgadget.gadgetbridge.util.GB;
|
||||
|
||||
public class GetWorkoutTotalsRequest extends Request {
|
||||
private static final Logger LOG = LoggerFactory.getLogger(GetWorkoutTotalsRequest.class);
|
||||
@@ -66,9 +68,17 @@ public class GetWorkoutTotalsRequest extends Request {
|
||||
|
||||
Workout.WorkoutTotals.Response packet = (Workout.WorkoutTotals.Response) receivedPacket;
|
||||
|
||||
if (packet.error != null) {
|
||||
LOG.warn("Error {} occurred during workout pace sync. ignoring", packet.error);
|
||||
GB.toast("Error occurred during workout sync", Toast.LENGTH_LONG, GB.WARN);
|
||||
supportProvider.nextWorkoutSync(remainder, GetWorkoutTotalsRequest.this.finalizeReq);
|
||||
return;
|
||||
}
|
||||
|
||||
if (packet.number != this.workoutNumbers.workoutNumber)
|
||||
throw new WorkoutParseException("Incorrect workout number!");
|
||||
|
||||
|
||||
LOG.info("Workout {} totals:", this.workoutNumbers.workoutNumber);
|
||||
LOG.info("Number : {}", packet.number);
|
||||
LOG.info("Status : {}", packet.status);
|
||||
@@ -136,27 +146,7 @@ public class GetWorkoutTotalsRequest extends Request {
|
||||
this.nextRequest(nextRequest);
|
||||
} else {
|
||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(databaseId);
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, databaseId, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (!remainder.isEmpty()) {
|
||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||
GetWorkoutTotalsRequest.this.supportProvider,
|
||||
remainder.remove(0),
|
||||
remainder
|
||||
);
|
||||
nextRequest.setFinalizeReq(GetWorkoutTotalsRequest.this.finalizeReq);
|
||||
// Cannot do this with nextRequest because it's in a callback
|
||||
try {
|
||||
nextRequest.doPerform();
|
||||
} catch (IOException e) {
|
||||
finalizeReq.handleException(new ResponseParseException("Cannot send next request", e));
|
||||
}
|
||||
} else {
|
||||
supportProvider.endOfWorkoutSync();
|
||||
}
|
||||
}
|
||||
});
|
||||
supportProvider.downloadWorkoutGpsFiles(this.workoutNumbers.workoutNumber, databaseId, () -> supportProvider.nextWorkoutSync(remainder, GetWorkoutTotalsRequest.this.finalizeReq));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user