/* Copyright (C) 2020-2024 Andreas Shimokawa
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.model;
import java.util.Date;
import java.util.List;
import de.greenrobot.dao.query.QueryBuilder;
import nodomain.freeyourgadget.gadgetbridge.database.DBHelper;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummary;
import nodomain.freeyourgadget.gadgetbridge.entities.BaseActivitySummaryDao;
import nodomain.freeyourgadget.gadgetbridge.entities.DaoSession;
import nodomain.freeyourgadget.gadgetbridge.entities.Device;
import nodomain.freeyourgadget.gadgetbridge.entities.User;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
public interface ActivitySummaryParser {
/**
* Re-parse an existing {@link BaseActivitySummary}, updating it from the existing binary data.
*
* @param summary the existing {@link BaseActivitySummary}. It's not guaranteed that it
* contains any raw binary data.
* @param forDetails whether the parsing is for the details page. If this is false, the parser
* should avoid slow operations such as reading and parsing raw files from
* storage.
* @return the update {@link BaseActivitySummary}
*/
BaseActivitySummary parseBinaryData(BaseActivitySummary summary, final boolean forDetails);
static BaseActivitySummary findOrCreateBaseActivitySummary(final DaoSession session,
final GBDevice gbDevice,
final int timestampSeconds) {
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 BaseActivitySummaryDao summaryDao = session.getBaseActivitySummaryDao();
final QueryBuilder qb = summaryDao.queryBuilder();
qb.where(BaseActivitySummaryDao.Properties.StartTime.eq(new Date(timestampSeconds * 1000L)));
qb.where(BaseActivitySummaryDao.Properties.DeviceId.eq(deviceId));
qb.where(BaseActivitySummaryDao.Properties.UserId.eq(user.getId()));
final List summaries = qb.build().list();
if (summaries.isEmpty()) {
final BaseActivitySummary summary = new BaseActivitySummary();
summary.setStartTime(new Date(timestampSeconds * 1000L));
summary.setDeviceId(deviceId);
summary.setUser(user);
// These will be set later, once we parse the summary
summary.setEndTime(new Date(timestampSeconds * 1000L));
summary.setActivityKind(ActivityKind.UNKNOWN.getCode());
return summary;
}
return summaries.get(0);
}
}