mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-24 16:21:16 +02:00
Bangle.js:actTrk: fix 'Reset fetch date' function
This commit is contained in:
parent
c2a4eed13a
commit
35021f28fa
@ -1,9 +1,12 @@
|
|||||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.banglejs;
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.banglejs;
|
||||||
|
|
||||||
|
import static java.lang.Integer.parseInt;
|
||||||
|
import static java.lang.Long.parseLong;
|
||||||
import static java.lang.Math.cos;
|
import static java.lang.Math.cos;
|
||||||
import static java.lang.Math.sqrt;
|
import static java.lang.Math.sqrt;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.json.JSONArray;
|
import org.json.JSONArray;
|
||||||
@ -17,6 +20,7 @@ import java.io.File;
|
|||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
@ -49,7 +53,7 @@ class BangleJSActivityTrack extends BangleJSDeviceSupport {
|
|||||||
signalFetchingStarted(device, context);
|
signalFetchingStarted(device, context);
|
||||||
//GB.toast("TYPE_GPS_TRACKS says hi!", Toast.LENGTH_LONG, GB.INFO);
|
//GB.toast("TYPE_GPS_TRACKS says hi!", Toast.LENGTH_LONG, GB.INFO);
|
||||||
|
|
||||||
String lastSyncedID = getLatestFetchedRecorderLog();
|
String lastSyncedID = getLatestFetchedRecorderLog(device);
|
||||||
|
|
||||||
JSONObject o = new JSONObject();
|
JSONObject o = new JSONObject();
|
||||||
try {
|
try {
|
||||||
@ -124,7 +128,7 @@ class BangleJSActivityTrack extends BangleJSDeviceSupport {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!json.has("lines")) { // if no lines were sent with this json object, it signifies that the whole recorder log has been transmitted.
|
if (!json.has("lines")) { // if no lines were sent with this json object, it signifies that the whole recorder log has been transmitted.
|
||||||
setLatestFetchedRecorderLog(dir, log);
|
setLatestFetchedRecorderLog(log, device);
|
||||||
parseFetchedRecorderCSV(dir, filename, log, device, context); // I tried refactoring to parse all fetched logs in one go at the end instead. But that only gave me more troubles. This seems like a more stable approach at least in the Bangle.js case.
|
parseFetchedRecorderCSV(dir, filename, log, device, context); // I tried refactoring to parse all fetched logs in one go at the end instead. But that only gave me more troubles. This seems like a more stable approach at least in the Bangle.js case.
|
||||||
if (tracksList.length()==0) {
|
if (tracksList.length()==0) {
|
||||||
signalFetchingEnded(device, context);
|
signalFetchingEnded(device, context);
|
||||||
@ -382,8 +386,8 @@ class BangleJSActivityTrack extends BangleJSDeviceSupport {
|
|||||||
//LOG.debug("check here 7");
|
//LOG.debug("check here 7");
|
||||||
BaseActivitySummary summary = null;
|
BaseActivitySummary summary = null;
|
||||||
|
|
||||||
Date startTime = new Date(Long.parseLong(storedLogArray2[1][0].split("\\.\\d")[0])*1000L);
|
Date startTime = new Date(parseLong(storedLogArray2[1][0].split("\\.\\d")[0])*1000L);
|
||||||
Date endTime = new Date(Long.parseLong(storedLogArray2[storedLogArray2.length-1][0].split("\\.\\d")[0])*1000L);
|
Date endTime = new Date(parseLong(storedLogArray2[storedLogArray2.length-1][0].split("\\.\\d")[0])*1000L);
|
||||||
summary = new BaseActivitySummary();
|
summary = new BaseActivitySummary();
|
||||||
summary.setName(log);
|
summary.setName(log);
|
||||||
summary.setStartTime(startTime);
|
summary.setStartTime(startTime);
|
||||||
@ -689,38 +693,94 @@ class BangleJSActivityTrack extends BangleJSDeviceSupport {
|
|||||||
startTimeout(device, context);
|
startTimeout(device, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static String getLatestFetchedRecorderLog() {
|
private static String getLatestFetchedRecorderLog(GBDevice device) {
|
||||||
File dir;
|
// "lastSportsActivityTimeMillis" is what
|
||||||
try {
|
// `ActivitySummaryActivity.resetFetchTimestampToChosenDate()` uses, so we have to
|
||||||
dir = FileUtils.getExternalFilesDir();
|
// control if the user changed that value, and if so recompile a new sync id from that info.
|
||||||
} catch (IOException e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String filename = "latestFetchedRecorderLog.txt";
|
|
||||||
File inputFile = new File(dir, filename);
|
|
||||||
String lastSyncedID = "";
|
|
||||||
try {
|
|
||||||
lastSyncedID = FileUtils.getStringFromFile(inputFile).replace("\n","");
|
|
||||||
} catch (IOException ignored) {
|
|
||||||
}
|
|
||||||
//lastSyncedID = "20230706x"; // DEBUGGING
|
|
||||||
|
|
||||||
LOG.info("Last Synced log ID: " + lastSyncedID);
|
String lastSyncedId = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()).
|
||||||
//requestActivityTracksList(lastSyncedID);
|
getString("lastSportsActivityIdBangleJS","19700101a");
|
||||||
|
LOG.debug("lastSyncedId: " + lastSyncedId);
|
||||||
|
|
||||||
return lastSyncedID;
|
long lastSportsActivityTimeMillis = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()).
|
||||||
|
getLong("lastSportsActivityTimeMillis",0);
|
||||||
|
LOG.debug("lastSportsActivityTimeMillis: " + lastSportsActivityTimeMillis);
|
||||||
|
|
||||||
|
Calendar dateFromId = parseCalendarFromBangleJSLogId(lastSyncedId);
|
||||||
|
Calendar dateFromMillis = parseCalendarFromMillis(lastSportsActivityTimeMillis);
|
||||||
|
|
||||||
|
LOG.debug("lastSyncedIdMillis: " + dateFromId.getTimeInMillis());
|
||||||
|
|
||||||
|
int intMillis = parseInt(compileDateStringFromCalendar(dateFromMillis));
|
||||||
|
int intBangle = parseInt(lastSyncedId.substring(0,lastSyncedId.length()-1));
|
||||||
|
|
||||||
|
LOG.debug("intMillis: " + intMillis);
|
||||||
|
LOG.debug("intBangle: " + intBangle);
|
||||||
|
|
||||||
|
//if (dateFromMillis.before(dateFromId)) { // This would not work b/c the millis didn't ever become the same in my testing, even if compiled from the same sync id string.
|
||||||
|
if (intMillis < intBangle) {
|
||||||
|
dateFromMillis.add(Calendar.DATE, -1); // We want the day before so we fetch from the day the user reset to.
|
||||||
|
int year = dateFromMillis.get(Calendar.YEAR);
|
||||||
|
int month = dateFromMillis.get(Calendar.MONTH);
|
||||||
|
int dayBefore = dateFromMillis.get(Calendar.DATE);
|
||||||
|
|
||||||
|
|
||||||
|
String yearString = String.valueOf(year);
|
||||||
|
String monthString = String.valueOf(month);
|
||||||
|
if (month<10) monthString = "0" + monthString;
|
||||||
|
String dayBeforeString = String.valueOf(dayBefore);
|
||||||
|
if (dayBefore<10) dayBeforeString = "0" + dayBeforeString;
|
||||||
|
String letter = "z";
|
||||||
|
|
||||||
|
return yearString + monthString + dayBeforeString + letter;
|
||||||
|
} else {
|
||||||
|
return lastSyncedId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setLatestFetchedRecorderLog(File dir, String log) {
|
private static void setLatestFetchedRecorderLog(String log, GBDevice device) {
|
||||||
|
Calendar date = parseCalendarFromBangleJSLogId(log);
|
||||||
|
|
||||||
String filenameLogID = "latestFetchedRecorderLog.txt";
|
SharedPreferences.Editor editor = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()).edit();
|
||||||
File outputFileLogID = new File(dir, filenameLogID);
|
editor.remove("lastSportsActivityIdBangleJS"); //FIXME: key reconstruction is BAD (FIXME inherited from `ActivitySummaryActivity`.
|
||||||
try {
|
editor.remove("lastSportsActivityTimeMillis"); //FIXME: key reconstruction is BAD
|
||||||
FileUtils.copyStringToFile(log,outputFileLogID,"");
|
editor.putString("lastSportsActivityIdBangleJS", log);
|
||||||
//GB.toast(context, "Log ID " + log + " written to " + filenameLogID, Toast.LENGTH_LONG, GB.INFO);
|
editor.putLong("lastSportsActivityTimeMillis", date.getTimeInMillis());
|
||||||
} catch (IOException e) {
|
editor.apply();
|
||||||
LOG.error("Could not write to file", e);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static Calendar parseCalendarFromBangleJSLogId(String log) {
|
||||||
|
int year = parseInt(log.substring(0,4));
|
||||||
|
int month = parseInt(log.substring(4,6));
|
||||||
|
int day = parseInt(log.substring(6,8));
|
||||||
|
|
||||||
|
LOG.debug("DateFromId: " + year+ "|"+ month + "|" +day);
|
||||||
|
|
||||||
|
Calendar date = Calendar.getInstance();
|
||||||
|
date.set(year,month,day);
|
||||||
|
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Calendar parseCalendarFromMillis(long millis) {
|
||||||
|
Calendar date = Calendar.getInstance();
|
||||||
|
date.setTimeInMillis(millis);
|
||||||
|
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String compileDateStringFromCalendar(Calendar date) {
|
||||||
|
int year = date.get(Calendar.YEAR);
|
||||||
|
int month = date.get(Calendar.MONTH);
|
||||||
|
int day = date.get(Calendar.DATE);
|
||||||
|
|
||||||
|
String yearString = String.valueOf(year);
|
||||||
|
String monthString = String.valueOf(month);
|
||||||
|
if (month<10) monthString = "0" + monthString;
|
||||||
|
String dayString = String.valueOf(day);
|
||||||
|
if (day<10) dayString = "0" + dayString;
|
||||||
|
|
||||||
|
return yearString + monthString + dayString;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void writeToRecorderCSV(String lines, File dir, String filename) {
|
private static void writeToRecorderCSV(String lines, File dir, String filename) {
|
||||||
|
Loading…
Reference in New Issue
Block a user