1/*
2 * Copyright 2019, Andrew Lindesay <apl@lindesay.co.nz>.
3 *
4 * All rights reserved. Distributed under the terms of the MIT License.
5 */
6#include "UserDetail.h"
7
8
9// These are keys that are used to store this object's data into a BMessage
10// instance.
11
12#define KEY_NICKNAME							"nickname"
13#define KEY_AGREEMENT							"agreement"
14#define KEY_IS_LATEST							"isLatest"
15#define KEY_CODE								"code"
16#define KEY_TIMESTAMP_AGREED					"timestampAgreed"
17
18
19UserUsageConditionsAgreement::UserUsageConditionsAgreement(BMessage* from)
20{
21	from->FindUInt64(KEY_TIMESTAMP_AGREED, &fTimestampAgreed);
22	from->FindString(KEY_CODE, &fCode);
23	from->FindBool(KEY_IS_LATEST, &fIsLatest);
24}
25
26
27UserUsageConditionsAgreement::UserUsageConditionsAgreement()
28	:
29	fCode(),
30	fTimestampAgreed(0),
31	fIsLatest(false)
32{
33}
34
35
36UserUsageConditionsAgreement::~UserUsageConditionsAgreement()
37{
38}
39
40
41const BString&
42UserUsageConditionsAgreement::Code() const
43{
44	return fCode;
45}
46
47
48const uint64
49UserUsageConditionsAgreement::TimestampAgreed() const
50{
51	return fTimestampAgreed;
52}
53
54
55const bool
56UserUsageConditionsAgreement::IsLatest() const
57{
58	return fIsLatest;
59}
60
61
62void
63UserUsageConditionsAgreement::SetCode(const BString& value)
64{
65	fCode = value;
66}
67
68
69void
70UserUsageConditionsAgreement::SetTimestampAgreed(uint64 value)
71{
72	fTimestampAgreed = value;
73}
74
75
76void
77UserUsageConditionsAgreement::SetIsLatest(const bool value)
78{
79	fIsLatest = value;
80}
81
82
83UserUsageConditionsAgreement&
84UserUsageConditionsAgreement::operator=(
85	const UserUsageConditionsAgreement& other)
86{
87	fCode = other.fCode;
88	fTimestampAgreed = other.fTimestampAgreed;
89	fIsLatest = other.fIsLatest;
90	return *this;
91}
92
93
94status_t
95UserUsageConditionsAgreement::Archive(BMessage* into, bool deep) const
96{
97	status_t result = B_OK;
98	if (result == B_OK)
99		result = into->AddUInt64(KEY_TIMESTAMP_AGREED, fTimestampAgreed);
100	if (result == B_OK)
101		result = into->AddString(KEY_CODE, fCode);
102	if (result == B_OK)
103		result = into->AddBool(KEY_IS_LATEST, fIsLatest);
104	return result;
105}
106
107
108UserDetail::UserDetail(BMessage* from)
109{
110	BMessage agreementMessage;
111	if (from->FindMessage(KEY_AGREEMENT,
112			&agreementMessage) == B_OK) {
113		fAgreement = UserUsageConditionsAgreement(&agreementMessage);
114	}
115	from->FindString(KEY_NICKNAME, &fNickname);
116}
117
118
119UserDetail::UserDetail()
120	:
121	fNickname(),
122	fAgreement()
123{
124}
125
126
127UserDetail::~UserDetail()
128{
129}
130
131
132const BString&
133UserDetail::Nickname() const
134{
135	return fNickname;
136}
137
138
139const UserUsageConditionsAgreement&
140UserDetail::Agreement() const
141{
142	return fAgreement;
143}
144
145
146void
147UserDetail::SetNickname(const BString& value)
148{
149	fNickname = value;
150}
151
152
153void
154UserDetail::SetAgreement(
155	const UserUsageConditionsAgreement& value)
156{
157	fAgreement = value;
158}
159
160
161UserDetail&
162UserDetail::operator=(const UserDetail& other)
163{
164	fNickname = other.fNickname;
165	fAgreement = other.fAgreement;
166	return *this;
167}
168
169
170status_t
171UserDetail::Archive(BMessage* into, bool deep) const
172{
173	status_t result = B_OK;
174	if (result == B_OK) {
175		BMessage agreementMessage;
176		result = fAgreement.Archive(&agreementMessage, true);
177		if (result == B_OK)
178			result = into->AddMessage(KEY_AGREEMENT, &agreementMessage);
179	}
180	if (result == B_OK)
181		result = into->AddString(KEY_NICKNAME, fNickname);
182	return result;
183}
184