mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge.git
synced 2025-01-10 17:11:56 +01:00
parent
bc814b31e7
commit
43262b3f29
@ -210,7 +210,7 @@ public abstract class HuaweiBRCoordinator extends AbstractBLClassicDeviceCoordin
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device, final Context context) {
|
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device, final Context context) {
|
||||||
return new HuaweiWorkoutGbParser(device, context);
|
return new HuaweiWorkoutGbParser(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -219,7 +219,7 @@ public abstract class HuaweiLECoordinator extends AbstractBLEDeviceCoordinator i
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device, final Context context) {
|
public ActivitySummaryParser getActivitySummaryParser(final GBDevice device, final Context context) {
|
||||||
return new HuaweiWorkoutGbParser(device, context);
|
return new HuaweiWorkoutGbParser(device);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -70,7 +70,7 @@ public class HuaweiSettingsCustomizer implements DeviceSpecificSettingsCustomize
|
|||||||
if (preference.getKey().equals("huawei_reparse_workout_data")) {
|
if (preference.getKey().equals("huawei_reparse_workout_data")) {
|
||||||
if (((SwitchPreferenceCompat) preference).isChecked()) {
|
if (((SwitchPreferenceCompat) preference).isChecked()) {
|
||||||
GB.toast("Starting workout reparse", Toast.LENGTH_SHORT, 0);
|
GB.toast("Starting workout reparse", Toast.LENGTH_SHORT, 0);
|
||||||
new HuaweiWorkoutGbParser(handler.getDevice(), handler.getContext()).parseAllWorkouts();
|
new HuaweiWorkoutGbParser(handler.getDevice()).parseAllWorkouts();
|
||||||
GB.toast("Workout reparse is complete", Toast.LENGTH_SHORT, 0);
|
GB.toast("Workout reparse is complete", Toast.LENGTH_SHORT, 0);
|
||||||
|
|
||||||
((SwitchPreferenceCompat) preference).setChecked(false);
|
((SwitchPreferenceCompat) preference).setChecked(false);
|
||||||
|
@ -45,17 +45,23 @@ public interface ActivitySummaryParser {
|
|||||||
final GBDevice gbDevice,
|
final GBDevice gbDevice,
|
||||||
final int timestampSeconds) {
|
final int timestampSeconds) {
|
||||||
final Device device = DBHelper.getDevice(gbDevice, session);
|
final Device device = DBHelper.getDevice(gbDevice, session);
|
||||||
|
return findOrCreateBaseActivitySummary(session, device.getId(), timestampSeconds);
|
||||||
|
}
|
||||||
|
|
||||||
|
static BaseActivitySummary findOrCreateBaseActivitySummary(final DaoSession session,
|
||||||
|
final long deviceId,
|
||||||
|
final int timestampSeconds) {
|
||||||
final User user = DBHelper.getUser(session);
|
final User user = DBHelper.getUser(session);
|
||||||
final BaseActivitySummaryDao summaryDao = session.getBaseActivitySummaryDao();
|
final BaseActivitySummaryDao summaryDao = session.getBaseActivitySummaryDao();
|
||||||
final QueryBuilder<BaseActivitySummary> qb = summaryDao.queryBuilder();
|
final QueryBuilder<BaseActivitySummary> qb = summaryDao.queryBuilder();
|
||||||
qb.where(BaseActivitySummaryDao.Properties.StartTime.eq(new Date(timestampSeconds * 1000L)));
|
qb.where(BaseActivitySummaryDao.Properties.StartTime.eq(new Date(timestampSeconds * 1000L)));
|
||||||
qb.where(BaseActivitySummaryDao.Properties.DeviceId.eq(device.getId()));
|
qb.where(BaseActivitySummaryDao.Properties.DeviceId.eq(deviceId));
|
||||||
qb.where(BaseActivitySummaryDao.Properties.UserId.eq(user.getId()));
|
qb.where(BaseActivitySummaryDao.Properties.UserId.eq(user.getId()));
|
||||||
final List<BaseActivitySummary> summaries = qb.build().list();
|
final List<BaseActivitySummary> summaries = qb.build().list();
|
||||||
if (summaries.isEmpty()) {
|
if (summaries.isEmpty()) {
|
||||||
final BaseActivitySummary summary = new BaseActivitySummary();
|
final BaseActivitySummary summary = new BaseActivitySummary();
|
||||||
summary.setStartTime(new Date(timestampSeconds * 1000L));
|
summary.setStartTime(new Date(timestampSeconds * 1000L));
|
||||||
summary.setDevice(device);
|
summary.setDeviceId(deviceId);
|
||||||
summary.setUser(user);
|
summary.setUser(user);
|
||||||
|
|
||||||
// These will be set later, once we parse the summary
|
// These will be set later, once we parse the summary
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
along with this program. If not, see <https://www.gnu.org/licenses/>. */
|
||||||
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei;
|
package nodomain.freeyourgadget.gadgetbridge.service.devices.huawei;
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
@ -64,11 +63,9 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
|
|||||||
// TODO: Might be nicer to propagate the exceptions, so they can be handled upstream
|
// TODO: Might be nicer to propagate the exceptions, so they can be handled upstream
|
||||||
|
|
||||||
private final GBDevice gbDevice;
|
private final GBDevice gbDevice;
|
||||||
private final Context context;
|
|
||||||
|
|
||||||
public HuaweiWorkoutGbParser(final GBDevice gbDevice, final Context context) {
|
public HuaweiWorkoutGbParser(final GBDevice gbDevice) {
|
||||||
this.gbDevice = gbDevice;
|
this.gbDevice = gbDevice;
|
||||||
this.context = context;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -93,7 +90,7 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
|
|||||||
LOG.warn("Failed to find huawei summary for {}", summary.getStartTime());
|
LOG.warn("Failed to find huawei summary for {}", summary.getStartTime());
|
||||||
return summary;
|
return summary;
|
||||||
}
|
}
|
||||||
updateBaseSummary(db, huaweiSummaries.get(0), summary);
|
updateBaseSummary(session, huaweiSummaries.get(0), summary);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOG.error("Failed to update summary");
|
LOG.error("Failed to update summary");
|
||||||
}
|
}
|
||||||
@ -235,9 +232,10 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
|
|||||||
parseUnknownWorkoutData();
|
parseUnknownWorkoutData();
|
||||||
|
|
||||||
try (DBHandler db = GBApplication.acquireDB()) {
|
try (DBHandler db = GBApplication.acquireDB()) {
|
||||||
QueryBuilder<HuaweiWorkoutSummarySample> qb = db.getDaoSession().getHuaweiWorkoutSummarySampleDao().queryBuilder();
|
final DaoSession session = db.getDaoSession();
|
||||||
|
QueryBuilder<HuaweiWorkoutSummarySample> qb = session.getHuaweiWorkoutSummarySampleDao().queryBuilder();
|
||||||
for (HuaweiWorkoutSummarySample summary : qb.listLazy()) {
|
for (HuaweiWorkoutSummarySample summary : qb.listLazy()) {
|
||||||
parseWorkout(summary.getWorkoutId());
|
parseWorkout(session, summary.getWorkoutId(), summary.getDeviceId());
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
GB.toast("Exception parsing workouts", Toast.LENGTH_SHORT, GB.ERROR, e);
|
GB.toast("Exception parsing workouts", Toast.LENGTH_SHORT, GB.ERROR, e);
|
||||||
@ -306,43 +304,49 @@ public class HuaweiWorkoutGbParser implements ActivitySummaryParser {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void parseWorkout(Long workoutId) {
|
public void parseWorkout(Long workoutId) {
|
||||||
if (workoutId == null)
|
|
||||||
return;
|
|
||||||
|
|
||||||
try (DBHandler db = GBApplication.acquireDB()) {
|
try (DBHandler db = GBApplication.acquireDB()) {
|
||||||
QueryBuilder<HuaweiWorkoutSummarySample> qbSummary = db.getDaoSession().getHuaweiWorkoutSummarySampleDao().queryBuilder().where(
|
final DaoSession session = db.getDaoSession();
|
||||||
HuaweiWorkoutSummarySampleDao.Properties.WorkoutId.eq(workoutId)
|
final Device device = DBHelper.getDevice(gbDevice, session);
|
||||||
);
|
parseWorkout(session, workoutId, device.getId());
|
||||||
List<HuaweiWorkoutSummarySample> summarySamples = qbSummary.build().list();
|
|
||||||
if (summarySamples.size() != 1)
|
|
||||||
return;
|
|
||||||
HuaweiWorkoutSummarySample summary = summarySamples.get(0);
|
|
||||||
|
|
||||||
final BaseActivitySummary baseSummary = ActivitySummaryParser.findOrCreateBaseActivitySummary(
|
|
||||||
db.getDaoSession(),
|
|
||||||
gbDevice,
|
|
||||||
summary.getStartTimestamp()
|
|
||||||
);
|
|
||||||
|
|
||||||
updateBaseSummary(db, summary, baseSummary);
|
|
||||||
|
|
||||||
db.getDaoSession().getBaseActivitySummaryDao().insertOrReplace(baseSummary);
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
GB.toast("Exception parsing workout data", Toast.LENGTH_SHORT, GB.ERROR, e);
|
GB.toast("Exception parsing workout data", Toast.LENGTH_SHORT, GB.ERROR, e);
|
||||||
LOG.error("Exception parsing workout data", e);
|
LOG.error("Exception parsing workout data", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateBaseSummary(final DBHandler db,
|
public void parseWorkout(final DaoSession session, final Long workoutId, final long deviceId) {
|
||||||
|
if (workoutId == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
QueryBuilder<HuaweiWorkoutSummarySample> qbSummary = session.getHuaweiWorkoutSummarySampleDao().queryBuilder().where(
|
||||||
|
HuaweiWorkoutSummarySampleDao.Properties.WorkoutId.eq(workoutId)
|
||||||
|
);
|
||||||
|
List<HuaweiWorkoutSummarySample> summarySamples = qbSummary.build().list();
|
||||||
|
if (summarySamples.size() != 1)
|
||||||
|
return;
|
||||||
|
HuaweiWorkoutSummarySample summary = summarySamples.get(0);
|
||||||
|
|
||||||
|
final BaseActivitySummary baseSummary = ActivitySummaryParser.findOrCreateBaseActivitySummary(
|
||||||
|
session,
|
||||||
|
deviceId,
|
||||||
|
summary.getStartTimestamp()
|
||||||
|
);
|
||||||
|
|
||||||
|
updateBaseSummary(session, summary, baseSummary);
|
||||||
|
|
||||||
|
session.getBaseActivitySummaryDao().insertOrReplace(baseSummary);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateBaseSummary(final DaoSession session,
|
||||||
final HuaweiWorkoutSummarySample summary,
|
final HuaweiWorkoutSummarySample summary,
|
||||||
final BaseActivitySummary baseSummary) {
|
final BaseActivitySummary baseSummary) {
|
||||||
try {
|
try {
|
||||||
QueryBuilder<HuaweiWorkoutDataSample> qbData = db.getDaoSession().getHuaweiWorkoutDataSampleDao().queryBuilder().where(
|
QueryBuilder<HuaweiWorkoutDataSample> qbData = session.getHuaweiWorkoutDataSampleDao().queryBuilder().where(
|
||||||
HuaweiWorkoutDataSampleDao.Properties.WorkoutId.eq(summary.getWorkoutId())
|
HuaweiWorkoutDataSampleDao.Properties.WorkoutId.eq(summary.getWorkoutId())
|
||||||
);
|
);
|
||||||
List<HuaweiWorkoutDataSample> dataSamples = qbData.build().list();
|
List<HuaweiWorkoutDataSample> dataSamples = qbData.build().list();
|
||||||
|
|
||||||
QueryBuilder<HuaweiWorkoutPaceSample> qbPace = db.getDaoSession().getHuaweiWorkoutPaceSampleDao().queryBuilder().where(
|
QueryBuilder<HuaweiWorkoutPaceSample> qbPace = session.getHuaweiWorkoutPaceSampleDao().queryBuilder().where(
|
||||||
HuaweiWorkoutPaceSampleDao.Properties.WorkoutId.eq(summary.getWorkoutId())
|
HuaweiWorkoutPaceSampleDao.Properties.WorkoutId.eq(summary.getWorkoutId())
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -112,7 +112,7 @@ public class GetWorkoutDataRequest extends Request {
|
|||||||
nextRequest.setFinalizeReq(this.finalizeReq);
|
nextRequest.setFinalizeReq(this.finalizeReq);
|
||||||
this.nextRequest(nextRequest);
|
this.nextRequest(nextRequest);
|
||||||
} else {
|
} else {
|
||||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
new HuaweiWorkoutGbParser(getDevice()).parseWorkout(this.databaseId);
|
||||||
|
|
||||||
if (!remainder.isEmpty()) {
|
if (!remainder.isEmpty()) {
|
||||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||||
|
@ -89,7 +89,7 @@ public class GetWorkoutPaceRequest extends Request {
|
|||||||
nextRequest.setFinalizeReq(this.finalizeReq);
|
nextRequest.setFinalizeReq(this.finalizeReq);
|
||||||
this.nextRequest(nextRequest);
|
this.nextRequest(nextRequest);
|
||||||
} else {
|
} else {
|
||||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(this.databaseId);
|
new HuaweiWorkoutGbParser(getDevice()).parseWorkout(this.databaseId);
|
||||||
|
|
||||||
if (!remainder.isEmpty()) {
|
if (!remainder.isEmpty()) {
|
||||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||||
|
@ -103,7 +103,7 @@ public class GetWorkoutTotalsRequest extends Request {
|
|||||||
nextRequest.setFinalizeReq(this.finalizeReq);
|
nextRequest.setFinalizeReq(this.finalizeReq);
|
||||||
this.nextRequest(nextRequest);
|
this.nextRequest(nextRequest);
|
||||||
} else {
|
} else {
|
||||||
new HuaweiWorkoutGbParser(getDevice(), getContext()).parseWorkout(databaseId);
|
new HuaweiWorkoutGbParser(getDevice()).parseWorkout(databaseId);
|
||||||
|
|
||||||
if (!remainder.isEmpty()) {
|
if (!remainder.isEmpty()) {
|
||||||
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
GetWorkoutTotalsRequest nextRequest = new GetWorkoutTotalsRequest(
|
||||||
|
Loading…
Reference in New Issue
Block a user