diff --git a/src/config.ts b/src/config.ts index 06c0b8f..7aac4f4 100644 --- a/src/config.ts +++ b/src/config.ts @@ -9,6 +9,8 @@ export const Config = { gadgetbridge: { db_path: process.env.GADGETBRIDGE_DB_PATH || "src/gadgetbridge/db/Gadgetbridge.db", + old_db_path: + process.env.GADGETBRIDGE_OLD_DB_PATH || "src/gadgetbridge/db/OldSteps.db", }, grist: { diff --git a/src/gadgetbridge/client.ts b/src/gadgetbridge/client.ts index 0a7a3f2..e598ea9 100644 --- a/src/gadgetbridge/client.ts +++ b/src/gadgetbridge/client.ts @@ -8,20 +8,29 @@ export type StepRow = { export class GadgetbridgeClient { private db: DatabaseSync; - constructor(dbPath: string) { + constructor(dbPath: string, oldDbPath: string) { this.db = new DatabaseSync(dbPath, { open: true }); + this.db.exec(`ATTACH DATABASE '${oldDbPath}' AS old`); } getStepsPerDay(fromTimestamp: number, toTimestamp: number): StepRow[] { const stmt = this.db.prepare(` - SELECT - DATE(TIMESTAMP, 'unixepoch', 'localtime') AS date, - SUM(STEPS) AS steps - FROM HUAMI_EXTENDED_ACTIVITY_SAMPLE - WHERE TIMESTAMP >= ? AND TIMESTAMP < ? + SELECT date, SUM(steps) AS steps + FROM ( + SELECT + DATE(TIMESTAMP, 'unixepoch', 'localtime') AS date, + STEPS AS steps + FROM HUAMI_EXTENDED_ACTIVITY_SAMPLE + WHERE TIMESTAMP >= ? AND TIMESTAMP < ? + UNION ALL + SELECT date, steps + FROM old.steps + WHERE date >= DATE(?, 'unixepoch', 'localtime') + AND date < DATE(?, 'unixepoch', 'localtime') + ) GROUP BY date ORDER BY date `); - return stmt.all(fromTimestamp, toTimestamp) as StepRow[]; + return stmt.all(fromTimestamp, toTimestamp, fromTimestamp, toTimestamp) as StepRow[]; } } diff --git a/src/index.ts b/src/index.ts index c880a72..0bde183 100644 --- a/src/index.ts +++ b/src/index.ts @@ -140,7 +140,7 @@ await privateServer.register(fastifyAxios, getAxiosConfig()); await publicServer.register(fastifyWebsocket); // Clients and Services -const gadgetbridgeClient = new GadgetbridgeClient(Config.gadgetbridge.db_path); +const gadgetbridgeClient = new GadgetbridgeClient(Config.gadgetbridge.db_path, Config.gadgetbridge.old_db_path); const gadgetbridgeService = new GadgetbridgeService(gadgetbridgeClient); const gristClient = new GristClient(privateServer.axios.grist);