/* 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); } }