1/*
2 * Copyright 2003-2007, Haiku Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _DISK_DEVICE_LIST_H
6#define _DISK_DEVICE_LIST_H
7
8
9#include <DiskDeviceDefs.h>
10#include <DiskDeviceVisitor.h>
11#include <Handler.h>
12#include <ObjectList.h>
13
14class BDiskDevice;
15class BDiskDeviceRoster;
16class BLocker;
17class BPartition;
18class BSession;
19
20
21class BDiskDeviceList : public BHandler {
22public:
23	BDiskDeviceList(bool useOwnLocker = true);
24	virtual ~BDiskDeviceList();
25
26	virtual void MessageReceived(BMessage *message);
27	virtual void SetNextHandler(BHandler *handler);
28
29	status_t Fetch();
30	void Unset();
31
32	bool Lock();
33	void Unlock();
34
35	int32 CountDevices() const;
36	BDiskDevice *DeviceAt(int32 index) const;
37
38	BDiskDevice *VisitEachDevice(BDiskDeviceVisitor *visitor);
39	BPartition *VisitEachPartition(BDiskDeviceVisitor *visitor);
40
41	BPartition *VisitEachMountedPartition(BDiskDeviceVisitor *visitor);
42	BPartition *VisitEachMountablePartition(BDiskDeviceVisitor *visitor);
43
44	BDiskDevice *DeviceWithID(partition_id id) const;
45	BPartition *PartitionWithID(partition_id id) const;
46
47	virtual void MountPointMoved(BPartition *partition);
48	virtual void PartitionMounted(BPartition *partition);
49	virtual void PartitionUnmounted(BPartition *partition);
50	virtual void PartitionInitialized(BPartition *partition);
51	virtual void PartitionResized(BPartition *partition);
52	virtual void PartitionMoved(BPartition *partition);
53	virtual void PartitionCreated(BPartition *partition);
54	virtual void PartitionDeleted(BPartition *partition,
55		partition_id partitionID);
56	virtual void PartitionDefragmented(BPartition *partition);
57	virtual void PartitionRepaired(BPartition *partition);
58	virtual void PartitionChanged(BPartition *partition, uint32 event);
59	virtual void MediaChanged(BDiskDevice *device);
60	virtual void DeviceAdded(BDiskDevice *device);
61	virtual void DeviceRemoved(BDiskDevice *device);
62
63private:
64	status_t _StartWatching();
65	void _StopWatching();
66
67	void _MountPointMoved(BMessage *message);
68	void _PartitionMounted(BMessage *message);
69	void _PartitionUnmounted(BMessage *message);
70	void _PartitionInitialized(BMessage *message);
71	void _PartitionResized(BMessage *message);
72	void _PartitionMoved(BMessage *message);
73	void _PartitionCreated(BMessage *message);
74	void _PartitionDeleted(BMessage *message);
75	void _PartitionDefragmented(BMessage *message);
76	void _PartitionRepaired(BMessage *message);
77	void _MediaChanged(BMessage *message);
78	void _DeviceAdded(BMessage *message);
79	void _DeviceRemoved(BMessage *message);
80
81	BDiskDevice *_FindDevice(BMessage *message);
82	BPartition *_FindPartition(BMessage *message);
83
84	BDiskDevice *_UpdateDevice(BMessage *message);
85
86private:
87	BLocker						*fLocker;
88	BObjectList<BDiskDevice>	fDevices;
89	bool						fSubscribed;
90};
91
92#endif	// _DISK_DEVICE_LIST_H
93