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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
|
#include "timelineitem.h"
TimelineItem::TimelineItem(TimelineItem::Type type, Flags flags, const QDateTime ×tamp, quint16 duration):
TimelineItem(QUuid::createUuid(), type, flags, timestamp, duration)
{
}
TimelineItem::TimelineItem(const QUuid &uuid, TimelineItem::Type type, Flags flags, const QDateTime ×tamp, quint16 duration):
PebblePacket(),
m_itemId(uuid),
m_timestamp(timestamp),
m_duration(duration),
m_type(type),
m_flags(flags)
{
}
QUuid TimelineItem::itemId() const
{
return m_itemId;
}
void TimelineItem::setLayout(quint8 layout)
{
m_layout = layout;
}
void TimelineItem::setFlags(Flags flags)
{
m_flags = flags;
}
void TimelineItem::appendAttribute(const TimelineAttribute &attribute)
{
m_attributes.append(attribute);
}
void TimelineItem::appendAction(const TimelineAction &action)
{
m_actions.append(action);
}
QList<TimelineAttribute> TimelineItem::attributes() const
{
return m_attributes;
}
QList<TimelineAction> TimelineItem::actions() const
{
return m_actions;
}
QByteArray TimelineItem::serialize() const
{
QByteArray ret;
ret.append(m_itemId.toRfc4122());
ret.append(m_parentId.toRfc4122());
int ts = m_timestamp.toMSecsSinceEpoch() / 1000;
ret.append(ts & 0xFF); ret.append((ts >> 8) & 0xFF); ret.append((ts >> 16) & 0xFF); ret.append((ts >> 24) & 0xFF);
ret.append(m_duration & 0xFF); ret.append(((m_duration >> 8) & 0xFF));
ret.append((quint8)m_type);
ret.append(m_flags & 0xFF); ret.append(((m_flags >> 8) & 0xFF));
ret.append(m_layout);
QByteArray serializedAttributes;
foreach (const TimelineAttribute &attribute, m_attributes) {
serializedAttributes.append(attribute.serialize());
}
QByteArray serializedActions;
foreach (const TimelineAction &action, m_actions) {
serializedActions.append(action.serialize());
}
quint16 dataLength = serializedAttributes.length() + serializedActions.length();
ret.append(dataLength & 0xFF); ret.append(((dataLength >> 8) & 0xFF));
ret.append(m_attributes.count());
ret.append(m_actions.count());
ret.append(serializedAttributes);
ret.append(serializedActions);
return ret;
}
TimelineAction::TimelineAction(quint8 actionId, TimelineAction::Type type, const QList<TimelineAttribute> &attributes):
PebblePacket(),
m_actionId(actionId),
m_type(type),
m_attributes(attributes)
{
}
void TimelineAction::appendAttribute(const TimelineAttribute &attribute)
{
m_attributes.append(attribute);
}
void TimelineAttribute::setContent(const QString &content)
{
m_content = content.toUtf8();
}
void TimelineAttribute::setContent(TimelineAttribute::IconID iconId)
{
m_content.clear();
m_content.append((quint8)iconId);
m_content.append('\0');
m_content.append('\0');
m_content.append(0x80);
}
void TimelineAttribute::setContent(TimelineAttribute::Color color)
{
m_content.clear();
m_content.append((quint8)color);
}
void TimelineAttribute::setContent(const QStringList &values)
{
m_content.clear();
foreach (const QString &value, values) {
if (!m_content.isEmpty()) {
m_content.append('\0');
}
m_content.append(value.toUtf8());
}
}
void TimelineAttribute::setContent(quint8 data)
{
m_content.clear();
m_content.append(data);
}
QByteArray TimelineAttribute::serialize() const
{
QByteArray ret;
ret.append((quint8)m_type);
ret.append(m_content.length() & 0xFF); ret.append(((m_content.length() >> 8) & 0xFF)); // length
ret.append(m_content);
return ret;
}
|