summaryrefslogtreecommitdiff
path: root/rockworkd/libpebble/blobdb.h
blob: b1db403ac87f7b8deeea64202dec5c0ad1b0ccf3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#ifndef BLOBDB_H
#define BLOBDB_H

#include "watchconnection.h"
#include "pebble.h"
#include "timelineitem.h"
#include "healthparams.h"
#include "appmetadata.h"

#include <QObject>
#include <QDateTime>
#include <QOrganizerEvent>

QTORGANIZER_USE_NAMESPACE


class BlobDB : public QObject
{
    Q_OBJECT
public:
    enum BlobDBId {
        BlobDBIdTest = 0,
        BlobDBIdPin = 1,
        BlobDBIdApp = 2,
        BlobDBIdReminder = 3,
        BlobDBIdNotification = 4,
        BlobDBIdAppSettings = 7

    };
    enum Operation {
        OperationInsert = 0x01,
        OperationDelete = 0x04,
        OperationClear = 0x05
    };

    enum Status {
        StatusSuccess = 0x00,
        StatusError = 0x01
    };


    explicit BlobDB(Pebble *pebble, WatchConnection *connection);

    void insertNotification(const Notification &notification);
    void insertTimelinePin(const QUuid &uuid, TimelineItem::Layout layout, const QDateTime &startTime, const QDateTime &endTime, const QString &title, const QString &desctiption, const QMap<QString, QString> fields, bool recurring);
    void removeTimelinePin(const QUuid &uuid);
    void insertReminder();
    void clearTimeline();
    void syncCalendar(const QList<CalendarEvent> &events);

    void clearApps();
    void insertAppMetaData(const AppInfo &info);
    void removeApp(const AppInfo &info);

    void insert(BlobDBId database, const TimelineItem &item);
    void remove(BlobDBId database, const QUuid &uuid);
    void clear(BlobDBId database);

    void setHealthParams(const HealthParams &healthParams);
    void setUnits(bool imperial);

private slots:
    void blobCommandReply(const QByteArray &data);
    void actionInvoked(const QByteArray &data);
    void sendActionReply();
    void sendNext();

signals:
    void muteSource(const QString &sourceId);
    void actionTriggered(const QString &actToken);
    void appInserted(const QUuid &uuid);

private:
    quint16 generateToken();
    AppMetadata appInfoToMetadata(const AppInfo &info, HardwarePlatform hardwarePlatform);

private:

    class BlobCommand: public PebblePacket
    {
    public:
        BlobDB::Operation m_command; // quint8
        quint16 m_token;
        BlobDB::BlobDBId m_database;

        QByteArray m_key;
        QByteArray m_value;

        QByteArray serialize() const override;
    };

    Pebble *m_pebble;
    WatchConnection *m_connection;

    QHash<QUuid, Notification> m_notificationSources;

    QList<CalendarEvent> m_calendarEntries;
    CalendarEvent findCalendarEvent(const QString &id);

    HealthParams m_healthParams;

    BlobCommand *m_currentCommand = nullptr;
    QList<BlobCommand*> m_commandQueue;

    QString m_blobDBStoragePath;
};

#endif // BLOBDB_H