xref: /haiku/src/servers/notification/NotificationReceived.cpp (revision cbe0a0c436162d78cc3f92a305b64918c839d079)
1 /*
2  * Copyright 2010, Haiku, Inc. All Rights Reserved.
3  * Copyright 2008-2009, Pier Luigi Fiorini. All Rights Reserved.
4  * Copyright 2004-2008, Michael Davidson. All Rights Reserved.
5  * Copyright 2004-2007, Mikael Eiman. All Rights Reserved.
6  * Distributed under the terms of the MIT License.
7  *
8  * Authors:
9  *		Michael Davidson, slaad@bong.com.au
10  *		Mikael Eiman, mikael@eiman.tv
11  *		Pier Luigi Fiorini, pierluigi.fiorini@gmail.com
12  */
13 
14 #include <Message.h>
15 #include <Notification.h>
16 #include <NotificationReceived.h>
17 
18 const type_code kTypeCode = 'ipnt';
19 
20 
21 NotificationReceived::NotificationReceived()
22 	:
23 	fTitle(""),
24 	fType(B_INFORMATION_NOTIFICATION),
25 	fEnabled(false),
26 	fLastReceived(time(NULL))
27 {
28 }
29 
30 
31 NotificationReceived::NotificationReceived(const char* title,
32 	notification_type type, bool enabled)
33 	:
34 	fTitle(title),
35 	fType(type),
36 	fEnabled(enabled),
37 	fLastReceived(time(NULL))
38 {
39 }
40 
41 
42 NotificationReceived::~NotificationReceived()
43 {
44 }
45 
46 
47 bool
48 NotificationReceived::AllowsTypeCode(type_code code) const
49 {
50 	return code == kTypeCode;
51 }
52 
53 
54 status_t
55 NotificationReceived::Flatten(void* buffer, ssize_t numBytes) const
56 {
57 	BMessage msg;
58 	msg.AddString("notify_title", fTitle);
59 	msg.AddInt32("notify_type", (int32)fType);
60 	msg.AddInt32("notify_lastreceived", (int32)fLastReceived);
61 	msg.AddBool("notify_enabled", fEnabled);
62 
63 	if (numBytes < msg.FlattenedSize())
64 		return B_ERROR;
65 
66 	return msg.Flatten((char*)buffer, numBytes);
67 }
68 
69 
70 ssize_t
71 NotificationReceived::FlattenedSize() const
72 {
73 	BMessage msg;
74 	msg.AddString("notify_title", fTitle);
75 	msg.AddInt32("notify_type", (int32)fType);
76 	msg.AddInt32("notify_lastreceived", (int32)fLastReceived);
77 	msg.AddBool("notify_enabled", fEnabled);
78 
79 	return msg.FlattenedSize();
80 }
81 
82 
83 bool
84 NotificationReceived::IsFixedSize() const
85 {
86 	return false;
87 }
88 
89 
90 type_code
91 NotificationReceived::TypeCode() const
92 {
93 	return kTypeCode;
94 }
95 
96 
97 status_t
98 NotificationReceived::Unflatten(type_code code, const void* buffer,
99 	ssize_t numBytes)
100 {
101 	if (code != kTypeCode)
102 		return B_ERROR;
103 
104 	BMessage msg;
105 	status_t error = msg.Unflatten((const char*)buffer);
106 
107 	if (error == B_OK) {
108 		msg.FindString("notify_title", &fTitle);
109 		msg.FindInt32("notify_type", (int32 *)&fType);
110 		msg.FindInt32("notify_lastreceived", (int32 *)&fLastReceived);
111 		msg.FindBool("notify_enabled", &fEnabled);
112 	}
113 
114 	return error;
115 }
116 
117 
118 const char*
119 NotificationReceived::Title()
120 {
121 	return fTitle.String();
122 }
123 
124 
125 notification_type
126 NotificationReceived::Type()
127 {
128 	return fType;
129 }
130 
131 
132 void
133 NotificationReceived::SetType(notification_type type)
134 {
135 	fType = type;
136 }
137 
138 
139 time_t
140 NotificationReceived::LastReceived()
141 {
142 	return fLastReceived;
143 }
144 
145 
146 bool
147 NotificationReceived::Allowed()
148 {
149 	return fEnabled;
150 }
151 
152 
153 void
154 NotificationReceived::UpdateTimeStamp()
155 {
156 	fLastReceived = time(NULL);
157 }
158 
159 
160 void
161 NotificationReceived::SetTimeStamp(time_t time)
162 {
163 	fLastReceived = time;
164 }
165