Initial commit
[tietoopcom] / src / TocSettings.cpp
1 /** \file TocSettings.cpp\r
2  * \brief Implementation of TocSettings class\r
3  * \r
4  * Tieto Open Communicator - Client for the Telepathy communications framework.\r
5  * Copyright (c) 2010, Tieto Corporation\r
6  *\r
7  * All rights reserved.\r
8  * Redistribution and use in source and binary forms, with or without modification,\r
9  * are permitted provided that the following conditions are met:\r
10  *\r
11  *      Redistributions of source code must retain the above copyright notice,\r
12  *      this list of conditions and the following disclaimer.\r
13  *      Redistributions in binary form must reproduce the above copyright notice,\r
14  *      this list of conditions and the following disclaimer in the documentation\r
15  *      and/or other materials provided with the distribution.\r
16  *      Neither the name of the Tieto Corporation nor the names of its contributors \r
17  *      may be used to endorse or promote products derived from this software without\r
18  *      specific prior written permission.\r
19  *\r
20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"\r
21  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r
22  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\r
23  * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,\r
24  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r
25  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\r
26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\r
27  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,\r
28  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
29  * \r
30  */\r
31 \r
32 #include "TocSettings"\r
33 \r
34 #include <QSettings>\r
35 #include <QDebug>\r
36 \r
37 // Initialize static objects\r
38 TocSettings* TocSettings::_pSelf = 0;\r
39 \r
40 TocSettings* TocSettings::getInstance() {\r
41 \r
42         if (!_pSelf)\r
43                 _pSelf = new TocSettings();\r
44 \r
45         return _pSelf;\r
46 }\r
47 \r
48 TocSettings::TocSettings() \r
49         : _register(false) {\r
50                 \r
51         _pProtocolMap = new QMap<QString, QString>();\r
52         _pProtocolMap->insert("Jabber", "jabber");\r
53         _pProtocolMap->insert("SIP", "sip");\r
54         _pProtocolMap->insert("Google Talk", "jabber");\r
55 \r
56         _pContactList = new TocContactList();\r
57 \r
58         read();\r
59 }\r
60 \r
61 TocSettings::~TocSettings() {\r
62 \r
63         save();\r
64         \r
65         delete _pProtocolMap;\r
66         delete _pContactList;\r
67 }\r
68 \r
69 void TocSettings::read() {\r
70         \r
71         QSettings settings("Tieto", "tietoopcom");\r
72         settings.beginGroup("Account");\r
73         _accountName            = settings.value("account/name").toString();\r
74         _accountUid             = settings.value("account/uid").toString();\r
75         _accountPasswd          = settings.value("account/pass").toString();\r
76         _protocol                       = settings.value("server/protocol").toString();\r
77         _protocols                      = _pProtocolMap->keys();\r
78         _protocolCommonName = settings.value("server/protocol-name").toString();\r
79         _server                         = settings.value("server/server").toString();\r
80         _serverHint                     = "";\r
81         _port                           = settings.value("server/port").toInt();\r
82         _portHint                       = 0;\r
83         _bOldSsl                        = settings.value("server/old-ssl", false).toBool();\r
84         _bIgnoreSslErrors       = settings.value("server/ignore-ssl-errors", false).toBool();\r
85         \r
86         settings.endGroup();\r
87         \r
88         settings.beginGroup("Contact_List");\r
89         _authorizationRule      = static_cast<AuthorizationRule>(settings.value("list/authorization-rule", Ask).toInt());\r
90         _sortOrder              = static_cast<SortOrder>(settings.value("list/sort-order", Alphabetical).toInt());\r
91 \r
92         if(!_pContactList)\r
93                 _pContactList = new TocContactList();\r
94         else\r
95                 _pContactList->clear();\r
96         \r
97         settings.beginGroup("Contacts");\r
98         \r
99         QStringList contactsList = settings.childKeys();\r
100         \r
101         foreach(QString entry, contactsList) {\r
102                 \r
103                 QStringList contactFields = settings.value(entry).toString().split("|");\r
104                 \r
105                 TocContact* pContact = new TocContact();\r
106                 pContact->uid = entry;\r
107                 pContact->name = contactFields[0];\r
108                 pContact->customIconPath = contactFields[1];\r
109                 pContact->customIconId = 0;\r
110                 pContact->gender = static_cast<Gender>(contactFields[2].toInt());\r
111                 pContact->presence = Offline;\r
112                 \r
113                 _pContactList->append(pContact);\r
114         }\r
115         \r
116         \r
117         settings.endGroup();\r
118         settings.endGroup();\r
119 \r
120         settings.beginGroup("Pending_Contact_Lists");\r
121 \r
122         settings.beginGroup("Added");\r
123         _addedContacts = settings.childKeys();\r
124         \r
125         settings.endGroup();\r
126 \r
127         settings.beginGroup("Removed");\r
128         _removedContacts = settings.childKeys();\r
129         \r
130         settings.endGroup();\r
131         settings.endGroup();\r
132         \r
133         settings.beginGroup("Themes");\r
134         \r
135 #ifdef QT_NO_DEBUG\r
136   #define ssPath        QString("/usr/share/tietoopcom/stylesheets/")\r
137 #else\r
138   #define ssPath        QString("./data/stylesheets/")\r
139 #endif //QT_NO_DEBUG\r
140         \r
141         _currentTheme = settings.value("theme", ssPath + "/default.qss").toString();\r
142         settings.endGroup();\r
143 }\r
144 \r
145 void TocSettings::save() {\r
146 \r
147         QSettings settings("Tieto", "tietoopcom");\r
148                 \r
149         settings.beginGroup("Account");\r
150         settings.setValue("account/name", _accountName);\r
151         settings.setValue("account/uid", _accountUid);\r
152         settings.setValue("account/pass", _accountPasswd);\r
153         settings.setValue("server/protocol", _protocol);\r
154         settings.setValue("server/protocol-name", _protocolCommonName);\r
155         settings.setValue("server/server", _server);\r
156         settings.setValue("server/port", _port);\r
157         settings.setValue("server/old-ssl", _bOldSsl);\r
158         settings.setValue("server/ignore-ssl-errors", _bIgnoreSslErrors);\r
159         settings.endGroup();\r
160         \r
161         settings.beginGroup("Contact_List");\r
162         settings.setValue("list/authorization-rule", _authorizationRule);\r
163         settings.setValue("list/sort-order", _sortOrder);\r
164         \r
165                 \r
166         settings.beginGroup("Contacts");\r
167         settings.remove("");\r
168         \r
169         QString entry;\r
170         TocContact* pContact = 0;\r
171 \r
172         foreach(pContact, *_pContactList) {\r
173 \r
174                 entry =  pContact->name + "|" +  pContact->customIconPath + "|" +  QString::number(static_cast<int>(pContact->gender)); \r
175                 settings.setValue(pContact->uid, entry);\r
176         }\r
177 \r
178         settings.endGroup();\r
179         settings.endGroup();\r
180 \r
181         settings.beginGroup("Pending_Contact_Lists");\r
182         settings.beginGroup("Added");\r
183         settings.remove("");\r
184         \r
185         foreach(QString added, _addedContacts)\r
186                 settings.setValue(added, 0);\r
187         \r
188         settings.endGroup ();\r
189 \r
190         settings.beginGroup("Removed");\r
191         settings.remove("");\r
192         \r
193         foreach(QString removed, _removedContacts)\r
194                 settings.setValue(removed, 0);\r
195         \r
196         settings.endGroup();\r
197         settings.endGroup();\r
198         \r
199         settings.beginGroup("Themes");\r
200         settings.setValue("theme", _currentTheme);\r
201         settings.endGroup();\r
202 }\r
203 \r
204 const QString& TocSettings::accountName() {\r
205         return _accountName;\r
206 }\r
207 \r
208 void TocSettings::setAccountName(const QString& accountName) {\r
209         _accountName = accountName;\r
210 }\r
211 \r
212 const QString& TocSettings::accountUid() {\r
213         return _accountUid;\r
214 }\r
215 \r
216 void TocSettings::setAccountUid(const QString& uid) {\r
217         _accountUid = uid;\r
218 }\r
219 \r
220 const QString& TocSettings::accountPasswd() {\r
221         return _accountPasswd;\r
222 }\r
223 \r
224 void TocSettings::setAccountPasswd(const QString& password) {\r
225         _accountPasswd = password;\r
226 }\r
227 \r
228 const QString& TocSettings::protocol() {\r
229         return _protocol;\r
230 }\r
231 \r
232 void TocSettings::setProtocol(const QString& protocol) {\r
233         _protocol = protocol;\r
234 }\r
235 \r
236 void TocSettings::setProtocolByName(const QString& service) {\r
237         \r
238         _protocol = _pProtocolMap->value(service);\r
239         _protocolCommonName = service;\r
240 \r
241         if(service == "Jabber") {\r
242                 _bOldSsl                        = false;\r
243                 _bIgnoreSslErrors       = false;\r
244         } else if( service == "Google Talk") {\r
245                 _bOldSsl                        = true;\r
246                 _bIgnoreSslErrors       = true;\r
247         } else if( service == "SIP") {\r
248                 _bOldSsl                        = false;\r
249                 _bIgnoreSslErrors       = false;\r
250         } else {\r
251                 _bOldSsl                        = false;\r
252                 _bIgnoreSslErrors       = false;\r
253         }\r
254 }\r
255 \r
256 const QStringList& TocSettings::protocols() {\r
257         return _protocols;\r
258 }\r
259 \r
260 void TocSettings::setProtocols(const QStringList& protocols) {\r
261         _protocols = protocols;\r
262 }\r
263 \r
264 const QString& TocSettings::server() {\r
265         return _server;\r
266 }\r
267 \r
268 void TocSettings::setServer(const QString& server) {\r
269         _server = server;\r
270 }\r
271 \r
272 int TocSettings::port() {\r
273         return _port;\r
274 }\r
275 \r
276 void TocSettings::setPort(int port) {\r
277         _port = port;\r
278 }\r
279 \r
280 bool TocSettings::isOldSslEnabled() {\r
281         return _bOldSsl;\r
282 }\r
283 \r
284 void TocSettings::setOldSslEnabled(bool bEnabled) {\r
285         _bOldSsl = bEnabled;\r
286 }\r
287 \r
288 bool TocSettings::isIgnoreSslErrorsEnabled() {\r
289         return _bIgnoreSslErrors;\r
290 }\r
291 \r
292 void TocSettings::setIgnoreSslErrorsEnabled(bool bEnabled) {\r
293         _bIgnoreSslErrors = bEnabled;\r
294 }\r
295 \r
296 QList<TocContact*>* TocSettings::contactList() {\r
297         return _pContactList;\r
298 }\r
299 \r
300 QStringList* TocSettings::contactsToAdd() {\r
301         return &_addedContacts;\r
302 }\r
303 \r
304 QStringList* TocSettings::contactsToRemove() {\r
305         return &_removedContacts;\r
306 }\r
307 \r
308 SortOrder TocSettings::sortOrder() {\r
309         return _sortOrder;\r
310 }\r
311 \r
312 void TocSettings::setSortOrder(SortOrder sortOrder) {\r
313         _sortOrder = sortOrder;\r
314 }\r
315 \r
316 AuthorizationRule TocSettings::authorizationRule() {\r
317         return _authorizationRule;\r
318 }\r
319 \r
320 void TocSettings::setAuthorizationRule(AuthorizationRule rule) {\r
321         _authorizationRule = rule;\r
322 }\r
323 \r
324 const QString& TocSettings::currentTheme() {\r
325         return _currentTheme;\r
326 }\r
327 \r
328 void TocSettings::setCurrentTheme(const QString& theme) {\r
329         _currentTheme = theme;\r
330 }\r
331 \r
332 bool TocSettings::isProtocolInstalled(const QString& protocol) {\r
333         return !_pProtocolMap->key(protocol).isEmpty();\r
334 }\r
335 \r
336 void TocSettings::installProtocol(const QString& commonName, const QString& protocol) {\r
337         _pProtocolMap->insert(commonName, protocol);\r
338         _protocols = _pProtocolMap->keys();\r
339 }\r
340 \r
341 const QString TocSettings::protocolCommonName() {\r
342         return _protocolCommonName;\r
343 }\r
344 \r
345 int TocSettings::portHint(const QString& uid, const QString& serviceName) {\r
346         \r
347         Q_UNUSED(uid);\r
348         \r
349         if( serviceName == "Jabber")\r
350                 return _portHint = 5222;\r
351         if( serviceName == "Google Talk")\r
352                 return _portHint = 5223;\r
353         if( serviceName == "SIP")\r
354                 return _portHint = 5060;\r
355 \r
356         return _portHint = 0;\r
357 }\r
358 \r
359 const QString& TocSettings::serverHint(const QString& uid, const QString& serviceName) {\r
360         \r
361         if(serviceName == "Jabber")\r
362                 if(uid.contains("@"))\r
363                         return _serverHint = uid.split("@").at(1);\r
364         if(serviceName == "Google Talk")\r
365                 return _serverHint = "talk.google.com";\r
366         if(serviceName == "SIP")\r
367                 return _serverHint = "";\r
368 \r
369         return _serverHint = "";\r
370 }\r
371 \r
372 bool TocSettings::isRegister() {\r
373         bool bRet = _register;\r
374         _register = false;\r
375         return bRet;\r
376 }\r
377 \r
378 void TocSettings::setRegister() {\r
379         _register = true;\r
380 }\r