HaikuDepot: notify work status from main window
[haiku.git] / src / kits / storage / NodeMonitorHandler.cpp
blobd9717c778ac6d05d3c8bf4b37ea6f6805428522a
1 #include "NodeMonitorHandler.h"
3 /*
4 * static util functions for the super lazy
5 */
8 /* static */ status_t
9 NodeMonitorHandler::make_entry_ref(dev_t device, ino_t directory,
10 const char * name,
11 entry_ref * ref)
13 ref->device = device;
14 ref->directory = directory;
15 return ref->set_name(name);
19 /* static */ void
20 NodeMonitorHandler::make_node_ref(dev_t device, ino_t node, node_ref * ref)
22 ref->device = device;
23 ref->node = node;
28 * public functions: constructor, destructor, MessageReceived
31 NodeMonitorHandler::NodeMonitorHandler(const char * name)
32 : BHandler(name)
34 // nothing to do
38 NodeMonitorHandler::~NodeMonitorHandler()
40 // nothing to do
44 /* virtual */ void
45 NodeMonitorHandler::MessageReceived(BMessage * msg)
47 status_t status = B_MESSAGE_NOT_UNDERSTOOD;
48 if (msg->what == B_NODE_MONITOR) {
49 int32 opcode;
50 if (msg->FindInt32("opcode", &opcode) == B_OK) {
51 switch (opcode) {
52 case B_ENTRY_CREATED:
53 status = HandleEntryCreated(msg);
54 break;
55 case B_ENTRY_REMOVED:
56 status = HandleEntryRemoved(msg);
57 break;
58 case B_ENTRY_MOVED:
59 status = HandleEntryMoved(msg);
60 break;
61 case B_STAT_CHANGED:
62 status = HandleStatChanged(msg);
63 break;
64 case B_ATTR_CHANGED:
65 status = HandleAttrChanged(msg);
66 break;
67 case B_DEVICE_MOUNTED:
68 status = HandleDeviceMounted(msg);
69 break;
70 case B_DEVICE_UNMOUNTED:
71 status = HandleDeviceUnmounted(msg);
72 break;
73 default:
74 break;
78 if (status == B_MESSAGE_NOT_UNDERSTOOD) {
79 inherited::MessageReceived(msg);
84 * default virtual functions do nothing
87 /* virtual */ void
88 NodeMonitorHandler::EntryCreated(const char *name, ino_t directory,
89 dev_t device, ino_t node)
91 // ignore
95 /* virtual */ void
96 NodeMonitorHandler::EntryRemoved(const char *name, ino_t directory,
97 dev_t device, ino_t node)
99 // ignore
103 /* virtual */ void
104 NodeMonitorHandler::EntryMoved(const char *name, const char *fromName,
105 ino_t fromDirectory, ino_t toDirectory, dev_t device,ino_t node,
106 dev_t nodeDevice)
108 // ignore
112 /* virtual */ void
113 NodeMonitorHandler::StatChanged(ino_t node, dev_t device, int32 statFields)
115 // ignore
119 /* virtual */ void
120 NodeMonitorHandler::AttrChanged(ino_t node, dev_t device)
122 // ignore
126 /* virtual */ void
127 NodeMonitorHandler::DeviceMounted(dev_t new_device, dev_t device,
128 ino_t directory)
130 // ignore
134 /* virtual */ void
135 NodeMonitorHandler::DeviceUnmounted(dev_t new_device)
137 // ignore
142 * private functions to rip apart the corresponding BMessage
145 status_t
146 NodeMonitorHandler::HandleEntryCreated(BMessage * msg)
148 const char *name;
149 ino_t directory;
150 dev_t device;
151 ino_t node;
152 if ((msg->FindString("name", &name) != B_OK) ||
153 (msg->FindInt64("directory", &directory) != B_OK) ||
154 (msg->FindInt32("device", &device) != B_OK) ||
155 (msg->FindInt64("node", &node) != B_OK)) {
156 return B_MESSAGE_NOT_UNDERSTOOD;
158 EntryCreated(name, directory, device, node);
159 return B_OK;
163 status_t
164 NodeMonitorHandler::HandleEntryRemoved(BMessage * msg)
166 const char *name;
167 ino_t directory;
168 dev_t device;
169 ino_t node;
170 if ((msg->FindString("name", &name) != B_OK) ||
171 (msg->FindInt64("directory", &directory) != B_OK) ||
172 (msg->FindInt32("device", &device) != B_OK) ||
173 (msg->FindInt64("node", &node) != B_OK)) {
174 return B_MESSAGE_NOT_UNDERSTOOD;
176 EntryRemoved(name, directory, device, node);
177 return B_OK;
181 status_t
182 NodeMonitorHandler::HandleEntryMoved(BMessage * msg)
184 const char *name;
185 const char *fromName;
186 ino_t fromDirectory;
187 ino_t toDirectory;
188 dev_t device;
189 ino_t node;
190 dev_t deviceNode;
191 if ((msg->FindString("name", &name) != B_OK) ||
192 (msg->FindString("from name", &fromName) != B_OK) ||
193 (msg->FindInt64("from directory", &fromDirectory) != B_OK) ||
194 (msg->FindInt64("to directory", &toDirectory) != B_OK) ||
195 (msg->FindInt32("device", &device) != B_OK) ||
196 (msg->FindInt32("node device", &deviceNode) != B_OK) ||
197 (msg->FindInt64("node", &node) != B_OK)) {
198 return B_MESSAGE_NOT_UNDERSTOOD;
200 EntryMoved(name, fromName, fromDirectory, toDirectory, device, node,
201 deviceNode);
202 return B_OK;
206 status_t
207 NodeMonitorHandler::HandleStatChanged(BMessage * msg)
209 ino_t node;
210 dev_t device;
211 int32 statFields;
212 if ((msg->FindInt64("node", &node) != B_OK) ||
213 (msg->FindInt32("device", &device) != B_OK) ||
214 (msg->FindInt32("fields", &statFields) != B_OK)) {
215 return B_MESSAGE_NOT_UNDERSTOOD;
217 StatChanged(node, device, statFields);
218 return B_OK;
222 status_t
223 NodeMonitorHandler::HandleAttrChanged(BMessage * msg)
225 ino_t node;
226 dev_t device;
227 if ((msg->FindInt64("node", &node) != B_OK) ||
228 (msg->FindInt32("device", &device) != B_OK)) {
229 return B_MESSAGE_NOT_UNDERSTOOD;
231 AttrChanged(node, device);
232 return B_OK;
236 status_t
237 NodeMonitorHandler::HandleDeviceMounted(BMessage * msg)
239 dev_t new_device;
240 dev_t device;
241 ino_t directory;
242 if ((msg->FindInt32("new device", &new_device) != B_OK) ||
243 (msg->FindInt32("device", &device) != B_OK) ||
244 (msg->FindInt64("directory", &directory) != B_OK)) {
245 return B_MESSAGE_NOT_UNDERSTOOD;
247 DeviceMounted(new_device, device, directory);
248 return B_OK;
252 status_t
253 NodeMonitorHandler::HandleDeviceUnmounted(BMessage * msg)
255 dev_t new_device;
256 if (msg->FindInt32("new device", &new_device) != B_OK) {
257 return B_MESSAGE_NOT_UNDERSTOOD;
259 DeviceUnmounted(new_device);
260 return B_OK;