1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-11-25 11:26:47 +01:00

Xiaomi: Dump activity data to storage

This commit is contained in:
José Rebelo 2023-10-18 11:02:49 +01:00
parent bcefc39ad8
commit e40b703678

View File

@ -22,21 +22,29 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.nio.ByteOrder; import java.nio.ByteOrder;
import java.text.SimpleDateFormat;
import java.util.Arrays; import java.util.Arrays;
import java.util.GregorianCalendar;
import java.util.HashSet; import java.util.HashSet;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.Queue; import java.util.Queue;
import java.util.Set; import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.BuildConfig;
import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.R;
import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions; import nodomain.freeyourgadget.gadgetbridge.service.btle.BLETypeConversions;
import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPreferences; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiPreferences;
import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiSupport; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.XiaomiSupport;
import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.services.XiaomiHealthService; import nodomain.freeyourgadget.gadgetbridge.service.devices.xiaomi.services.XiaomiHealthService;
import nodomain.freeyourgadget.gadgetbridge.util.CheckSums; import nodomain.freeyourgadget.gadgetbridge.util.CheckSums;
import nodomain.freeyourgadget.gadgetbridge.util.FileUtils;
import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.GB;
public class XiaomiActivityFileFetcher { public class XiaomiActivityFileFetcher {
@ -96,6 +104,11 @@ public class XiaomiActivityFileFetcher {
final byte[] activityData = Arrays.copyOfRange(data, 8, data.length - 4); final byte[] activityData = Arrays.copyOfRange(data, 8, data.length - 4);
final XiaomiActivityFileId fileId = XiaomiActivityFileId.from(fileIdBytes); final XiaomiActivityFileId fileId = XiaomiActivityFileId.from(fileIdBytes);
if (BuildConfig.DEBUG) {
// FIXME comment this out
dumpBytesToExternalStorage(fileId, data);
}
final XiaomiActivityParser activityParser = XiaomiActivityParser.create(fileId); final XiaomiActivityParser activityParser = XiaomiActivityParser.create(fileId);
if (activityParser == null) { if (activityParser == null) {
LOG.warn("Failed to find activity parser for {}", fileId); LOG.warn("Failed to find activity parser for {}", fileId);
@ -142,4 +155,22 @@ public class XiaomiActivityFileFetcher {
mHealthService.requestRecordedData(fileId); mHealthService.requestRecordedData(fileId);
} }
protected void dumpBytesToExternalStorage(final XiaomiActivityFileId fileId, final byte[] bytes) {
try {
final File externalFilesDir = FileUtils.getExternalFilesDir();
final File targetDir = new File(externalFilesDir, "rawFetchOperations");
targetDir.mkdirs();
final String filename = "xiaomi_" + GB.hexdump(fileId.toBytes()) + ".bin";
final File outputFile = new File(targetDir, filename);
final OutputStream outputStream = new FileOutputStream(outputFile);
outputStream.write(bytes);
outputStream.close();
} catch (final Exception e) {
LOG.error("Failed to dump bytes to storage", e);
}
}
} }