From afd1e2002ef270bb29f7abcfc97cc7f5ec49f970 Mon Sep 17 00:00:00 2001
From: shatty <shatty@nowhere.fake>
Date: Sun, 1 Feb 2004 05:50:00 +0000
Subject: [PATCH] basic interface

git-svn-id: file:///srv/svn/repos/haiku/trunk/current@6455 a95241bf-73f2-0310-859d-f6bbb57e9c96
---
 headers/private/storage/AddOnMonitorHandler.h | 61 +++++++++++++++++++
 1 file changed, 61 insertions(+)
 create mode 100644 headers/private/storage/AddOnMonitorHandler.h

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 <list>
+#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<add_on_entry_info> 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<add_on_directory_info> directories;
+	std::list<add_on_entry_info> pending_entries;
+	std::list<add_on_entry_info> former_entries;
+};
+
+
+}; // namespace Storage
+}; // namespace BPrivate
+
+using namespace BPrivate::Storage;
+
+#endif // _ADD_ON_MONITOR_HANDLER_H