xref: /haiku/src/servers/media/MediaFilesManager.h (revision 83b1a68c52ba3e0e8796282759f694b7fdddf06d)
1 /*
2  * Copyright 2003, Jérôme Duval. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _MEDIA_FILES_MANAGER_H
6 #define _MEDIA_FILES_MANAGER_H
7 
8 
9 #include <map>
10 
11 #include <Entry.h>
12 #include <File.h>
13 #include <Locker.h>
14 #include <MessageRunner.h>
15 #include <String.h>
16 
17 #include "DataExchange.h"
18 
19 
20 #define MEDIA_FILES_MANAGER_SAVE_TIMER 'mmst'
21 
22 
23 class MediaFilesManager : BLocker {
24 public:
25 								MediaFilesManager();
26 								~MediaFilesManager();
27 
28 			status_t			SaveState();
29 
30 			void				Dump();
31 
32 			area_id				GetTypesArea(int32& count);
33 			area_id				GetItemsArea(const char* type, int32& count);
34 
35 			status_t			GetRefFor(const char* type, const char* item,
36 									entry_ref** _ref);
37 			status_t			GetAudioGainFor(const char* type,
38 									const char* item, float* _gain);
39 			status_t			SetRefFor(const char* type, const char* item,
40 									const entry_ref& ref);
41 			status_t			SetAudioGainFor(const char* type,
42 									const char* item, float gain);
43 			status_t			InvalidateItem(const char* type,
44 									const char* item);
45 			status_t			RemoveItem(const char* type, const char* item);
46 
47 			void				TimerMessage();
48 
49 			void				HandleAddSystemBeepEvent(BMessage* message);
50 
51 private:
52 			struct item_info {
53 				item_info() : gain(1.0f) {}
54 
55 				entry_ref		ref;
56 				float			gain;
57 			};
58 
59 			void				_LaunchTimer();
60 			status_t			_GetItem(const char* type, const char* item,
61 									item_info*& info);
62 			status_t			_SetItem(const char* type, const char* item,
63 									const entry_ref* ref = NULL,
64 									const float* gain = NULL);
65 			status_t			_OpenSettingsFile(BFile& file, int mode);
66 			status_t			_LoadState();
67 
68 private:
69 			typedef std::map<BString, item_info> ItemMap;
70 			typedef std::map<BString, ItemMap> TypeMap;
71 
72 			TypeMap				fMap;
73 			BMessageRunner*		fSaveTimerRunner;
74 };
75 
76 #endif // _MEDIA_FILES_MANAGER_H
77