diff options
Diffstat (limited to '')
-rw-r--r-- | src/unstable/settings.cpp | 5 | ||||
-rw-r--r-- | src/unstable/settingsdriverini.cpp | 155 | ||||
-rw-r--r-- | src/unstable/settingsdriverini.h | 29 | ||||
-rw-r--r-- | src/unstable/settingsdriverregistry.cpp | 3 |
4 files changed, 190 insertions, 2 deletions
diff --git a/src/unstable/settings.cpp b/src/unstable/settings.cpp index 792aff9..b812b60 100644 --- a/src/unstable/settings.cpp +++ b/src/unstable/settings.cpp | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | #include "bu/settingsdrivertaf.h" | 3 | #include "bu/settingsdrivertaf.h" |
4 | #include "bu/settingsdriverregistry.h" | 4 | #include "bu/settingsdriverregistry.h" |
5 | #include "bu/settingsdriverini.h" | ||
5 | 6 | ||
6 | Bu::Settings::Settings( const Bu::UtfString &sCompany, | 7 | Bu::Settings::Settings( const Bu::UtfString &sCompany, |
7 | const Bu::UtfString &sProduct, Bu::Settings::Driver eDriver ) : | 8 | const Bu::UtfString &sProduct, Bu::Settings::Driver eDriver ) : |
@@ -15,7 +16,7 @@ Bu::Settings::Settings( const Bu::UtfString &sCompany, | |||
15 | #if defined( WIN32 ) | 16 | #if defined( WIN32 ) |
16 | pDriver = new Bu::SettingsDriverRegistry(); | 17 | pDriver = new Bu::SettingsDriverRegistry(); |
17 | #else | 18 | #else |
18 | pDriver = new Bu::SettingsDriverTaf(); | 19 | pDriver = new Bu::SettingsDriverIni(); |
19 | #endif | 20 | #endif |
20 | break; | 21 | break; |
21 | 22 | ||
@@ -24,7 +25,7 @@ Bu::Settings::Settings( const Bu::UtfString &sCompany, | |||
24 | break; | 25 | break; |
25 | 26 | ||
26 | case DriverIni: | 27 | case DriverIni: |
27 | throw Bu::ExceptionBase("Not supported"); | 28 | pDriver = new Bu::SettingsDriverIni(); |
28 | break; | 29 | break; |
29 | } | 30 | } |
30 | 31 | ||
diff --git a/src/unstable/settingsdriverini.cpp b/src/unstable/settingsdriverini.cpp new file mode 100644 index 0000000..46a40c6 --- /dev/null +++ b/src/unstable/settingsdriverini.cpp | |||
@@ -0,0 +1,155 @@ | |||
1 | #include "bu/settingsdriverini.h" | ||
2 | |||
3 | #include "bu/file.h" | ||
4 | #include "bu/buffer.h" | ||
5 | |||
6 | #include "bu/sio.h" | ||
7 | |||
8 | #include <stdlib.h> | ||
9 | |||
10 | using namespace Bu; | ||
11 | |||
12 | Bu::SettingsDriverIni::SettingsDriverIni() | ||
13 | { | ||
14 | } | ||
15 | |||
16 | Bu::SettingsDriverIni::~SettingsDriverIni() | ||
17 | { | ||
18 | Bu::File fOut( sPath, Bu::File::WriteNew ); | ||
19 | Bu::Buffer bOut( fOut ); | ||
20 | Bu::Formatter f( bOut ); | ||
21 | |||
22 | for( GroupHash::iterator i = hGroup.begin(); i; i++ ) | ||
23 | { | ||
24 | f << "[" << i.getKey().get() << "]" << f.nl; | ||
25 | for( StrHash::iterator k = (*i).begin(); k; k++ ) | ||
26 | { | ||
27 | f << k.getKey().get() << "=" << k.getValue().get() << f.nl; | ||
28 | } | ||
29 | f << f.nl; | ||
30 | } | ||
31 | } | ||
32 | |||
33 | void Bu::SettingsDriverIni::init( const Bu::UtfString &sCompany, | ||
34 | const Bu::UtfString &sProduct ) | ||
35 | { | ||
36 | Bu::UtfString us( getenv("HOME") ); | ||
37 | us += "/.config/"; | ||
38 | us += sCompany; | ||
39 | us += "/"; | ||
40 | us += sProduct; | ||
41 | sPath = us.get(); | ||
42 | try | ||
43 | { | ||
44 | Bu::File fIn( sPath, Bu::File::Read|Bu::File::Create ); | ||
45 | Bu::Buffer bIn( fIn ); | ||
46 | StrHash hKeys; | ||
47 | Bu::String sGroup; | ||
48 | while( !bIn.isEos() ) | ||
49 | { | ||
50 | Bu::String sIn = bIn.readLine(); | ||
51 | if( sIn[0] == '[' ) | ||
52 | { | ||
53 | if( !sGroup.isEmpty() ) | ||
54 | { | ||
55 | hGroup.insert( sGroup, hKeys ); | ||
56 | hKeys.clear(); | ||
57 | } | ||
58 | sGroup = Bu::String( sIn.begin()+1, sIn.find(']') ); | ||
59 | } | ||
60 | else | ||
61 | { | ||
62 | Bu::String::iterator i = sIn.find('='); | ||
63 | if( !i ) | ||
64 | continue; | ||
65 | |||
66 | hKeys.insert( Bu::String( sIn.begin(), i ), | ||
67 | Bu::String( i+1, sIn.end() ) ); | ||
68 | } | ||
69 | } | ||
70 | } | ||
71 | catch(...) | ||
72 | { | ||
73 | } | ||
74 | } | ||
75 | |||
76 | void Bu::SettingsDriverIni::set( const Bu::UtfString &sKey, const Bu::UtfString &sValue ) | ||
77 | { | ||
78 | Bu::String suKey = sKey.get(); | ||
79 | Bu::String::iterator i = suKey.find('/'); | ||
80 | Bu::UtfString sGrp; | ||
81 | Bu::UtfString sId; | ||
82 | if( !i ) | ||
83 | { | ||
84 | sGrp = ""; | ||
85 | sId = sKey; | ||
86 | } | ||
87 | else | ||
88 | { | ||
89 | Bu::String::iterator in; | ||
90 | for(;;) | ||
91 | { | ||
92 | in = i; | ||
93 | i = (in + 1).find('/'); | ||
94 | if( !i ) | ||
95 | break; | ||
96 | } | ||
97 | |||
98 | sGrp.set( Bu::String( suKey.begin(), in ) ); | ||
99 | sId.set( Bu::String( in+1, suKey.end() ) ); | ||
100 | } | ||
101 | |||
102 | // sio << "Group: " << sGrp.get() << sio.nl | ||
103 | // << "Key: " << sId.get() << sio.nl; | ||
104 | |||
105 | if( !hGroup.has( sGrp ) ) | ||
106 | { | ||
107 | StrHash hVal; | ||
108 | hVal.insert( sId, sValue ); | ||
109 | hGroup.insert( sGrp, hVal ); | ||
110 | } | ||
111 | else | ||
112 | { | ||
113 | hGroup.get( sGrp ).insert( sId, sValue ); | ||
114 | } | ||
115 | } | ||
116 | |||
117 | Bu::UtfString Bu::SettingsDriverIni::get( const Bu::UtfString &sKey, const Bu::UtfString &sValue ) | ||
118 | { | ||
119 | Bu::String suKey = sKey.get(); | ||
120 | Bu::String::iterator i = suKey.find('/'); | ||
121 | Bu::UtfString sGrp; | ||
122 | Bu::UtfString sId; | ||
123 | if( !i ) | ||
124 | { | ||
125 | sGrp = ""; | ||
126 | sId = sKey; | ||
127 | } | ||
128 | else | ||
129 | { | ||
130 | Bu::String::iterator in; | ||
131 | for(;;) | ||
132 | { | ||
133 | in = i; | ||
134 | i = (in + 1).find('/'); | ||
135 | if( !i ) | ||
136 | break; | ||
137 | } | ||
138 | |||
139 | sGrp.set( Bu::String( suKey.begin(), in ) ); | ||
140 | sId.set( Bu::String( in+1, suKey.end() ) ); | ||
141 | } | ||
142 | |||
143 | sio << "Group: " << sGrp.get() << sio.nl | ||
144 | << "Key: " << sId.get() << sio.nl; | ||
145 | |||
146 | try | ||
147 | { | ||
148 | return hGroup.get( sGrp ).get( sId ); | ||
149 | } | ||
150 | catch(...) | ||
151 | { | ||
152 | return sValue; | ||
153 | } | ||
154 | } | ||
155 | |||
diff --git a/src/unstable/settingsdriverini.h b/src/unstable/settingsdriverini.h new file mode 100644 index 0000000..c3942d6 --- /dev/null +++ b/src/unstable/settingsdriverini.h | |||
@@ -0,0 +1,29 @@ | |||
1 | #ifndef BU_SETTINGS_DRIVER_INI_H | ||
2 | #define BU_SETTINGS_DRIVER_INI_H | ||
3 | |||
4 | #include "bu/settingsdriver.h" | ||
5 | #include "bu/string.h" | ||
6 | #include "bu/hash.h" | ||
7 | |||
8 | namespace Bu | ||
9 | { | ||
10 | class SettingsDriverIni : public SettingsDriver | ||
11 | { | ||
12 | public: | ||
13 | SettingsDriverIni(); | ||
14 | virtual ~SettingsDriverIni(); | ||
15 | |||
16 | protected: | ||
17 | virtual void init( const Bu::UtfString &sCompany, const Bu::UtfString &sProduct ); | ||
18 | virtual void set( const Bu::UtfString &sKey, const Bu::UtfString &sValue ); | ||
19 | virtual Bu::UtfString get( const Bu::UtfString &sKey, const Bu::UtfString &sValue ); | ||
20 | |||
21 | private: | ||
22 | Bu::String sPath; | ||
23 | typedef Bu::Hash<Bu::UtfString, Bu::UtfString> StrHash; | ||
24 | typedef Bu::Hash<Bu::UtfString, StrHash> GroupHash; | ||
25 | GroupHash hGroup; | ||
26 | }; | ||
27 | }; | ||
28 | |||
29 | #endif | ||
diff --git a/src/unstable/settingsdriverregistry.cpp b/src/unstable/settingsdriverregistry.cpp index 40a08ac..89eda7b 100644 --- a/src/unstable/settingsdriverregistry.cpp +++ b/src/unstable/settingsdriverregistry.cpp | |||
@@ -1,3 +1,5 @@ | |||
1 | #ifdef WIN32 | ||
2 | |||
1 | #include "bu/settingsdriverregistry.h" | 3 | #include "bu/settingsdriverregistry.h" |
2 | #include <windows.h> | 4 | #include <windows.h> |
3 | #include "bu/string.h" | 5 | #include "bu/string.h" |
@@ -86,3 +88,4 @@ Bu::UtfString Bu::SettingsDriverRegistry::get( const Bu::UtfString &sKey, const | |||
86 | return Bu::UtfString( Bu::String( buf, iRet ) ); | 88 | return Bu::UtfString( Bu::String( buf, iRet ) ); |
87 | } | 89 | } |
88 | 90 | ||
91 | #endif | ||