diff --git a/headers/private/storage/AddOnMonitorHandler.h b/headers/private/storage/AddOnMonitorHandler.h new file mode 100644 index 0000000000..f471211cc4 --- /dev/null +++ b/headers/private/storage/AddOnMonitorHandler.h @@ -0,0 +1,61 @@ +#ifndef _ADD_ON_MONITOR_HANDLER_H +#define _ADD_ON_MONITOR_HANDLER_H + +#include +#include "NodeMonitorHandler.h" + +namespace BPrivate { +namespace Storage { + +struct add_on_entry_info { + char name[B_FILE_NAME_LENGTH]; + node_ref nref; + node_ref dir_nref; +}; + +struct add_on_directory_info { + node_ref nref; + std::list entries; +}; + +class AddOnMonitorHandler : public NodeMonitorHandler { +private: + typedef NodeMonitorHandler inherited; +public: + AddOnMonitorHandler(const char * name = "AddOnMonitorHandler"); + virtual ~AddOnMonitorHandler(); + + virtual void MessageReceived(BMessage * msg); + + // supply the add on directories here, in the order you want them checked + virtual status_t AddDirectory(const node_ref * nref); + +protected: + // hooks for subclass + virtual void AddOnCreated(const add_on_entry_info * entry_info); + virtual void AddOnEnabled(const add_on_entry_info * entry_info); + virtual void AddOnDisabled(const add_on_entry_info * entry_info); + virtual void AddOnRemoved(const add_on_entry_info * entry_info); + +protected: + virtual void EntryCreated(const char *name, ino_t directory, + dev_t device, ino_t node); + virtual void EntryRemoved(ino_t directory, dev_t device, ino_t node); + virtual void EntryMoved(const char *name, ino_t from_directory, + ino_t to_directory, dev_t device, ino_t node); + +private: + void HandlePulse(); + + std::list directories; + std::list pending_entries; + std::list former_entries; +}; + + +}; // namespace Storage +}; // namespace BPrivate + +using namespace BPrivate::Storage; + +#endif // _ADD_ON_MONITOR_HANDLER_H