2
* profiles.cpp - deal with profiles
3
* Copyright (C) 2001-2003 Justin Karneges
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public License
7
* as published by the Free Software Foundation; either version 2
8
* of the License, or (at your option) any later version.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this library; if not, write to the Free Software
17
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27
#include<qapplication.h>
30
#include"contactview.h"
31
#include"xmpp_xmlcommon.h"
32
#include"fancylabel.h"
35
using namespace XMLHelper;
37
UserAccount::UserAccount()
42
void UserAccount::reset()
65
opt_ignoreSSLWarnings = false;
66
opt_passphrase = false;
71
proxy_type = PROXY_NONE;
82
UserAccount::~UserAccount()
86
// FIXME: this should be a const function (as should other ::toXml functions)
87
QDomElement UserAccount::toXml(QDomDocument &doc, const QString &tagName)
89
QDomElement a = doc.createElement(tagName);
91
setBoolAttribute(a, "enabled", opt_enabled);
92
setBoolAttribute(a, "auto", opt_auto);
93
setBoolAttribute(a, "ssl", opt_ssl);
94
setBoolAttribute(a, "showOffline", tog_offline);
95
setBoolAttribute(a, "showAway", tog_away);
96
setBoolAttribute(a, "showHidden", tog_hidden);
97
setBoolAttribute(a, "showAgents", tog_agents);
98
setBoolAttribute(a, "keepAlive", opt_keepAlive);
99
setBoolAttribute(a, "plain", opt_plain);
100
setBoolAttribute(a, "log", opt_log);
101
setBoolAttribute(a, "reconn", opt_reconn);
102
setBoolAttribute(a, "ignoreSSLWarnings", opt_ignoreSSLWarnings);
103
//setBoolAttribute(a, "gpg", opt_gpg);
105
//QString jid = user + '@' + vhost;
106
a.appendChild(textTag(doc, "name", name));
107
a.appendChild(textTag(doc, "jid", jid));
109
a.appendChild(textTag(doc, "password", encodePassword(pass, jid) ));
110
a.appendChild(textTag(doc, "useHost", opt_host));
111
a.appendChild(textTag(doc, "host", host));
112
a.appendChild(textTag(doc, "port", QString::number(port)));
113
a.appendChild(textTag(doc, "resource", resource));
114
a.appendChild(textTag(doc, "priority", QString::number(priority)));
115
a.appendChild(textTag(doc, "OLR", olr_string));
116
a.appendChild(textTag(doc, "pgpSecretKeyID", pgpSecretKeyID));
119
a.appendChild(textTag(doc, "pgpPassphrase", encodePassword(pgpPassphrase, jid) ));
121
QDomElement r = doc.createElement("roster");
123
Roster::ConstIterator rit = roster.begin();
124
for ( ; rit != roster.end(); ++rit) {
125
const RosterItem &i = *rit;
126
QDomElement tag = i.toXml(&doc);
130
// now we check for redundant entries
131
QStringList groupList, removeList;
132
groupList << "/\\/" + name + "\\/\\"; // account name is a very 'special' group
134
// special groups that should also have their state remembered
135
groupList << ContactProfile::tr("General");
136
groupList << ContactProfile::tr("Agents/Transports");
138
// first, add all groups' names to groupList
139
rit = roster.begin();
140
for ( ; rit != roster.end(); ++rit) {
141
const RosterItem &i = *rit;
142
groupList += i.groups();
145
// now, check if there's groupState name entry in groupList
146
QMap<QString, GroupData>::Iterator git = groupState.begin();
147
for ( ; git != groupState.end(); ++git) {
150
QStringList::Iterator it = groupList.begin();
151
for ( ; it != groupList.end(); ++it)
152
if ( git.key() == *it ) {
158
removeList << git.key();
161
// remove redundant groups
162
QStringList::Iterator it = removeList.begin();
163
for ( ; it != removeList.end(); ++it)
164
groupState.remove( *it );
166
// and finally, save the data
167
QDomElement gs = doc.createElement("groupState");
169
git = groupState.begin();
170
for ( ; git != groupState.end(); ++git) {
171
//if ( !git.data().open || git.data().rank ) { // don't save unnecessary entries (the default is 'true' to open, and '0' to rank)
172
QDomElement group = doc.createElement("group");
173
group.setAttribute("name", git.key());
174
group.setAttribute("open", git.data().open ? "true" : "false");
175
group.setAttribute("rank", QString::number(git.data().rank));
176
gs.appendChild(group);
180
a.appendChild(textTag(doc, "proxyindex", QString::number(proxy_index)));
181
//a.appendChild(textTag(doc, "proxytype", QString::number(proxy_type)));
182
//a.appendChild(textTag(doc, "proxyhost", proxy_host));
183
//a.appendChild(textTag(doc, "proxyport", QString::number(proxy_port)));
184
//a.appendChild(textTag(doc, "proxyuser", proxy_user));
185
//a.appendChild(textTag(doc, "proxypass", encodePassword(proxy_pass, jid)));
187
a.appendChild(keybind.toXml(doc, "pgpkeybindings"));
188
a.appendChild(textTag(doc, "dtProxy", dtProxy.full()));
193
void UserAccount::fromXml(const QDomElement &a)
199
readEntry(a, "name", &name);
200
readBoolAttribute(a, "enabled", &opt_enabled);
201
readBoolAttribute(a, "auto", &opt_auto);
202
readBoolAttribute(a, "ssl", &opt_ssl);
203
readBoolAttribute(a, "showOffline", &tog_offline);
204
readBoolAttribute(a, "showAway", &tog_away);
205
readBoolAttribute(a, "showHidden", &tog_hidden);
206
readBoolAttribute(a, "showAgents", &tog_agents);
207
readBoolAttribute(a, "keepAlive", &opt_keepAlive);
208
readBoolAttribute(a, "plain", &opt_plain);
209
readBoolAttribute(a, "log", &opt_log);
210
readBoolAttribute(a, "reconn", &opt_reconn);
211
readBoolAttribute(a, "ignoreSSLWarnings", &opt_ignoreSSLWarnings);
212
//readBoolAttribute(a, "gpg", &opt_gpg);
214
readEntry(a, "host", &host);
215
readNumEntry(a, "port", &port);
218
QDomElement j = findSubTag(a, "jid", &found);
220
readBoolAttribute(j, "manual", &opt_host);
226
readEntry(a, "username", &user);
227
QDomElement j = findSubTag(a, "vhost", &found);
229
readBoolAttribute(j, "manual", &opt_host);
230
vhost = tagContent(j);
238
jid = user + '@' + vhost;
241
readBoolEntry(a, "useHost", &opt_host);
243
// read password (we must do this after reading the jid, to decode properly)
244
readEntry(a, "password", &pass);
248
pass = decodePassword(pass, jid);
252
readEntry(a, "resource", &resource);
253
readNumEntry(a, "priority", &priority);
254
readEntry(a, "OLR", &olr_string);
255
readEntry(a, "pgpSecretKeyID", &pgpSecretKeyID);
257
QDomElement pp = findSubTag(a, "pgpPassphrase", &found);
259
opt_passphrase = true;
260
pgpPassphrase = decodePassword(tagContent(pp), jid);
263
opt_passphrase = false;
265
QDomElement r = findSubTag(a, "roster", &found);
267
for(QDomNode n = r.firstChild(); !n.isNull(); n = n.nextSibling()) {
268
QDomElement i = n.toElement();
272
if(i.tagName() == "item") {
282
QDomElement gs = findSubTag(a, "groupState", &found);
284
for (QDomNode n = gs.firstChild(); !n.isNull(); n = n.nextSibling()) {
285
QDomElement i = n.toElement();
289
if (i.tagName() == "group") {
291
gd.open = i.attribute("open") == "true";
292
gd.rank = i.attribute("rank").toInt();
293
groupState.insert(i.attribute("name"), gd);
298
readNumEntry(a, "proxyindex", &proxy_index);
299
readNumEntry(a, "proxytype", &proxy_type);
300
readEntry(a, "proxyhost", &proxy_host);
301
readNumEntry(a, "proxyport", &proxy_port);
302
readEntry(a, "proxyuser", &proxy_user);
303
readEntry(a, "proxypass", &proxy_pass);
304
if(!proxy_pass.isEmpty())
305
proxy_pass = decodePassword(proxy_pass, jid);
307
r = findSubTag(a, "pgpkeybindings", &found);
312
readEntry(a, "dtProxy", &str);
316
UserProfile::UserProfile()
321
void UserProfile::reset()
324
nix = win = mac = FALSE;
336
progver = PROG_VERSION;
339
mwgeom.setRect(64, 64, 150, 360);
340
lastStatusString = "";
346
prefs.useleft = FALSE;
347
prefs.singleclick = FALSE;
348
prefs.defaultAction = 0;
349
prefs.delChats = dcHour;
350
prefs.showJoins = TRUE;
352
prefs.customBrowser = "";
353
prefs.customMailer = "";
354
prefs.alwaysOnTop = win ? TRUE : FALSE;
355
prefs.keepSizes = FALSE;
356
prefs.ignoreHeadline = FALSE;
357
prefs.ignoreNonRoster = FALSE;
358
prefs.useDock = win ? TRUE: FALSE;
359
prefs.dockDCstyle = win ? TRUE: FALSE;
360
prefs.dockHideMW = FALSE;
361
prefs.dockToolMW = FALSE;
362
prefs.isWMDock = false;
363
prefs.alertStyle = 2;
364
prefs.popupMsgs = FALSE;
365
prefs.popupChats = FALSE;
366
prefs.popupHeadlines = FALSE;
367
prefs.noAwayPopup = FALSE;
368
prefs.noUnlistedPopup = false;
370
prefs.incomingAs = 0;
371
prefs.askOnline = FALSE;
372
prefs.rosterAnim = TRUE;
373
prefs.autoVersion = false;
374
prefs.autoVCardOnLogin = true;
375
prefs.xmlConsoleOnLogin = false;
379
prefs.use_asAway = TRUE;
380
prefs.use_asXa = TRUE;
381
prefs.use_asOffline = FALSE;
382
prefs.asMessage = QObject::tr("Auto Status (idle)");
383
prefs.scrollTo = TRUE;
384
prefs.useEmoticons = false;
385
prefs.alertOpenChats = false;
386
prefs.raiseChatWindow = false;
387
prefs.showSubjects = true;
388
prefs.showCounter = false;
389
prefs.chatSays = false;
390
prefs.chatSoftReturn = true;
391
prefs.showGroupCounts = true;
392
prefs.smallChats = false;
395
prefs.sp.set(QObject::tr("Away from desk"), QObject::tr("I am away from my desk. Leave a message."));
396
prefs.sp.set(QObject::tr("Showering"), QObject::tr("I'm in the shower. You'll have to wait for me to get out."));
397
prefs.sp.set(QObject::tr("Eating"), QObject::tr("Out eating. Mmmm.. food."));
398
prefs.sp.set(QObject::tr("Sleep"), QObject::tr("Sleep is good. Zzzzz"));
399
prefs.sp.set(QObject::tr("Work"), QObject::tr("Can't chat. Gotta work."));
400
prefs.sp.set(QObject::tr("Air"), QObject::tr("Stepping out to get some fresh air."));
401
prefs.sp.set(QObject::tr("Movie"), QObject::tr("Out to a movie. Is that OK with you?"));
402
prefs.sp.set(QObject::tr("Secret"), QObject::tr("I'm not available right now and that's all you need to know."));
403
prefs.sp.set(QObject::tr("Out for the night"), QObject::tr("Out for the night."));
404
prefs.sp.set(QObject::tr("Greece"), QObject::tr("I have gone to a far away place. I will be back someday!"));
405
prefs.recentStatus.clear();
407
prefs.color[cOnline] = QColor("#0060C0");
408
prefs.color[cListBack] = QColor("#C0C0C0");
409
prefs.color[cAway] = QColor("#008080");
410
prefs.color[cDND] = QColor("#800000");
411
prefs.color[cOffline] = QColor("#000000");
412
prefs.color[cGroupFore] = QColor("#000000");
413
prefs.color[cGroupBack] = QColor("#FFFFFF");
414
prefs.color[cAnimFront] = QColor("#FF0000");
415
prefs.color[cAnimBack] = QColor("#000000");
417
prefs.font[fRoster] = QApplication::font().toString();
418
prefs.font[fMessage] = QApplication::font().toString();
419
prefs.font[fChat] = QApplication::font().toString();
421
QFont font = QApplication::font();
422
font.setPointSize( font.pointSize() - 2 );
423
prefs.font[fPopup] = font.toString();
426
// calculate the small font size
427
const int minimumFontSize = 7;
428
prefs.smallFontSize = qApp->font().pointSize();
429
prefs.smallFontSize -= 2;
430
if ( prefs.smallFontSize < minimumFontSize )
431
prefs.smallFontSize = minimumFontSize;
432
FancyLabel::setSmallFontSize( prefs.smallFontSize );
434
prefs.clNewHeadings = false;
436
prefs.player = "play";
437
prefs.noAwaySound = FALSE;
439
prefs.onevent[eMessage] = g.pathBase + "/sound/chat2.wav";
440
prefs.onevent[eChat1] = g.pathBase + "/sound/chat1.wav";
441
prefs.onevent[eChat2] = g.pathBase + "/sound/chat2.wav";
442
prefs.onevent[eSystem] = g.pathBase + "/sound/chat2.wav";
443
prefs.onevent[eHeadline] = g.pathBase + "/sound/chat2.wav";
444
prefs.onevent[eOnline] = g.pathBase + "/sound/online.wav";
445
prefs.onevent[eOffline] = g.pathBase + "/sound/offline.wav";
446
prefs.onevent[eSend] = g.pathBase + "/sound/send.wav";
447
prefs.onevent[eIncomingFT] = g.pathBase + "/sound/ft_incoming.wav";
448
prefs.onevent[eFTComplete] = g.pathBase + "/sound/ft_complete.wav";
450
// Added by Kiko 020621: sets up the default certificate store
451
prefs.trustCertStoreDir = g.pathBase + "/certs";
453
prefs.sizeEventDlg = EventDlg::defaultSize();
454
prefs.sizeChatDlg = ChatDlg::defaultSize();
456
prefs.jidComplete = true;
457
prefs.grabUrls = false;
458
prefs.noGCSound = true;
461
prefs.alwaysShowSelf = false;
464
prefs.toolbars.clear();
465
Options::ToolbarPrefs tb[3];
467
for (i = 0; i < sizeof(tb)/sizeof(Options::ToolbarPrefs); i++)
469
tb[i].name = QString::null;
471
tb[i].locked = false;
472
tb[i].stretchable = false;
475
tb[i].dock = Qt::DockTop;
478
tb[i].extraOffset = 0;
483
// Imitate old Psi button layout by default
484
tb[0].name = QObject::tr("Buttons");
487
tb[0].stretchable = true;
488
tb[0].keys << "button_options" << "button_status";
489
tb[0].dock = Qt::DockBottom;
490
prefs.toolbars.append(tb[0]);
492
tb[1].name = QObject::tr("Show contacts");
495
tb[1].keys << "show_offline" << "show_away" << "show_agents";
496
prefs.toolbars.append(tb[1]);
498
tb[2].name = QObject::tr("Event notifier");
501
tb[2].stretchable = true;
502
tb[2].keys << "event_notifier";
503
tb[2].dock = Qt::DockBottom;
505
prefs.toolbars.append(tb[2]);
508
prefs.gcHighlighting = true;
509
prefs.gcHighlights.clear();
511
prefs.gcNickColoring = true;
512
prefs.gcNickColors.clear();
514
prefs.gcNickColors << "Blue";
515
prefs.gcNickColors << "Green";
516
prefs.gcNickColors << "Orange";
517
prefs.gcNickColors << "Purple";
518
prefs.gcNickColors << "Red";
521
prefs.ppIsOn = false;
522
prefs.ppOnline = true;
523
prefs.ppOffline = true;
524
prefs.ppStatus = false;
525
prefs.ppMessage = true;
527
prefs.ppHeadline = true;
528
prefs.ppJidClip = 25;
529
prefs.ppStatusClip = -1;
530
prefs.ppTextClip = 300;
531
prefs.ppHideTime = 10000; // 10 sec
532
prefs.ppBorderColor = QColor (0x52, 0x97, 0xF9);
535
prefs.lockdown.roster = false;
536
prefs.lockdown.options = false;
537
prefs.lockdown.profiles = false;
538
prefs.lockdown.services = false;
539
prefs.lockdown.accounts = false;
541
prefs.useTransportIconsForContacts = false;
544
prefs.systemIconset = "default";
545
prefs.emoticons = "default";
546
prefs.defaultRosterIconset = "default";
548
prefs.serviceRosterIconset.clear();
549
prefs.serviceRosterIconset["transport"] = "transport";
550
prefs.serviceRosterIconset["aim"] = "aim";
551
prefs.serviceRosterIconset["gadugadu"] = "gadugadu";
552
prefs.serviceRosterIconset["icq"] = "icq";
553
prefs.serviceRosterIconset["msn"] = "msn";
554
prefs.serviceRosterIconset["yahoo"] = "yahoo";
555
prefs.serviceRosterIconset["sms"] = "sms";
557
prefs.customRosterIconset.clear();
560
prefs.rosterContactSortStyle = Options::ContactSortStyle_Status;
561
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Alpha;
562
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Alpha;
565
prefs.showTips = true;
569
prefs.discoItems = true;
570
prefs.discoInfo = true;
573
prefs.autoAuth = false;
576
prefs.eventPriorityHeadline = 0;
577
prefs.eventPriorityChat = 1;
578
prefs.eventPriorityMessage = 1;
579
prefs.eventPriorityAuth = 2;
580
prefs.eventPriorityFile = 3;
584
prefs.dtExternal = "";
587
bool UserProfile::toFile(const QString &fname)
591
QDomElement base = doc.createElement("psiconf");
592
base.setAttribute("version", "1.0");
593
doc.appendChild(base);
595
base.appendChild(textTag(doc, "progver", PROG_VERSION));
596
base.appendChild(textTag(doc, "geom", mwgeom));
597
base.appendChild(stringListToXml(doc, "recentGCList", recentGCList));
598
base.appendChild(stringListToXml(doc, "recentBrowseList", recentBrowseList));
599
base.appendChild(textTag(doc, "lastStatusString", lastStatusString));
600
base.appendChild(textTag(doc, "useSound", useSound));
602
QDomElement accs = doc.createElement("accounts");
603
base.appendChild(accs);
604
for(UserAccountList::Iterator ai = acc.begin(); ai != acc.end(); ++ai)
605
accs.appendChild((*ai).toXml(doc, "account"));
607
QDomElement prox = doc.createElement("proxies");
608
base.appendChild(prox);
609
for(ProxyItemList::Iterator pi = proxyList.begin(); pi != proxyList.end(); ++pi) {
610
const ProxyItem &p = *pi;
611
QDomElement i = doc.createElement("proxy");
612
i.appendChild(textTag(doc, "name", p.name));
613
i.appendChild(textTag(doc, "type", p.type));
614
i.appendChild(p.settings.toXml(&doc));
618
QDomElement p = doc.createElement("preferences");
622
QDomElement p_general = doc.createElement("general");
623
p.appendChild(p_general);
626
QDomElement p_roster = doc.createElement("roster");
627
p_general.appendChild(p_roster);
629
p_roster.appendChild(textTag(doc, "useleft", prefs.useleft));
630
p_roster.appendChild(textTag(doc, "singleclick", prefs.singleclick));
631
p_roster.appendChild(textTag(doc, "defaultAction", prefs.defaultAction));
632
p_roster.appendChild(textTag(doc, "showself", prefs.alwaysShowSelf));
633
p_roster.appendChild(textTag(doc, "useTransportIconsForContacts", prefs.useTransportIconsForContacts));
636
QDomElement sorting = doc.createElement("sortStyle");
637
p_roster.appendChild(sorting);
639
QString name = "status";
640
if ( prefs.rosterContactSortStyle == Options::ContactSortStyle_Alpha )
642
sorting.appendChild(textTag(doc, "contact", name));
645
if ( prefs.rosterGroupSortStyle == Options::GroupSortStyle_Rank )
647
sorting.appendChild(textTag(doc, "group", name));
650
if ( prefs.rosterAccountSortStyle == Options::AccountSortStyle_Rank )
652
sorting.appendChild(textTag(doc, "account", name));
656
QDomElement p_misc = doc.createElement("misc");
657
p_general.appendChild(p_misc);
659
p_misc.appendChild(textTag(doc, "smallChats", prefs.smallChats));
660
p_misc.appendChild(textTag(doc, "delChats", prefs.delChats));
661
p_misc.appendChild(textTag(doc, "showJoins", prefs.showJoins));
662
p_misc.appendChild(textTag(doc, "browser", prefs.browser));
663
p_misc.appendChild(textTag(doc, "customBrowser", prefs.customBrowser));
664
p_misc.appendChild(textTag(doc, "customMailer", prefs.customMailer));
665
p_misc.appendChild(textTag(doc, "alwaysOnTop", prefs.alwaysOnTop));
666
p_misc.appendChild(textTag(doc, "keepSizes", prefs.keepSizes));
667
p_misc.appendChild(textTag(doc, "ignoreHeadline", prefs.ignoreHeadline));
668
p_misc.appendChild(textTag(doc, "ignoreNonRoster", prefs.ignoreNonRoster));
669
p_misc.appendChild(textTag(doc, "scrollTo", prefs.scrollTo));
670
p_misc.appendChild(textTag(doc, "useEmoticons", prefs.useEmoticons));
671
p_misc.appendChild(textTag(doc, "alertOpenChats", prefs.alertOpenChats));
672
p_misc.appendChild(textTag(doc, "raiseChatWindow", prefs.raiseChatWindow));
673
p_misc.appendChild(textTag(doc, "showSubjects", prefs.showSubjects));
674
p_misc.appendChild(textTag(doc, "showCounter", prefs.showCounter));
675
p_misc.appendChild(textTag(doc, "chatSays", prefs.chatSays));
676
p_misc.appendChild(textTag(doc, "chatSoftReturn", prefs.chatSoftReturn));
677
p_misc.appendChild(textTag(doc, "showGroupCounts", prefs.showGroupCounts));
678
p_misc.appendChild(textTag(doc, "jidComplete", prefs.jidComplete));
679
p_misc.appendChild(textTag(doc, "grabUrls", prefs.grabUrls));
682
QDomElement p_dock = doc.createElement("dock");
683
p_general.appendChild(p_dock);
685
p_dock.appendChild(textTag(doc, "useDock", prefs.useDock));
686
p_dock.appendChild(textTag(doc, "dockDCstyle", prefs.dockDCstyle));
687
p_dock.appendChild(textTag(doc, "dockHideMW", prefs.dockHideMW));
688
p_dock.appendChild(textTag(doc, "dockToolMW", prefs.dockToolMW));
689
p_dock.appendChild(textTag(doc, "isWMDock", prefs.isWMDock));
692
QDomElement p_sec = doc.createElement("security");
693
p_general.appendChild(p_sec);
695
p_sec.appendChild(textTag(doc, "pgp", prefs.pgp));
699
// Added by Kiko 020621: stores SSL cert chain validation configuration
701
QDomElement p_ssl = doc.createElement("ssl");
702
p.appendChild(p_ssl);
704
p_ssl.appendChild(textTag(doc, "trustedcertstoredir", prefs.trustCertStoreDir));
708
QDomElement p_events = doc.createElement("events");
709
p.appendChild(p_events);
711
p_events.appendChild(textTag(doc, "alertstyle", prefs.alertStyle));
712
p_events.appendChild(textTag(doc, "autoAuth", prefs.autoAuth));
715
QDomElement p_receive = doc.createElement("receive");
716
p_events.appendChild(p_receive);
718
p_receive.appendChild(textTag(doc, "popupMsgs", prefs.popupMsgs));
719
p_receive.appendChild(textTag(doc, "popupChats", prefs.popupChats));
720
p_receive.appendChild(textTag(doc, "popupHeadlines", prefs.popupHeadlines));
721
p_receive.appendChild(textTag(doc, "noAwayPopup", prefs.noAwayPopup));
722
p_receive.appendChild(textTag(doc, "noUnlistedPopup", prefs.noUnlistedPopup));
723
p_receive.appendChild(textTag(doc, "raise", prefs.raise));
724
p_receive.appendChild(textTag(doc, "incomingAs", prefs.incomingAs));
728
QDomElement p_priority = doc.createElement("priority");
729
p_events.appendChild(p_priority);
731
p_priority.appendChild(textTag(doc, "message", prefs.eventPriorityMessage));
732
p_priority.appendChild(textTag(doc, "chat", prefs.eventPriorityChat));
733
p_priority.appendChild(textTag(doc, "headline", prefs.eventPriorityHeadline));
734
p_priority.appendChild(textTag(doc, "auth", prefs.eventPriorityAuth));
735
p_priority.appendChild(textTag(doc, "file", prefs.eventPriorityFile));
740
QDomElement p_pres = doc.createElement("presence");
741
p.appendChild(p_pres);
744
QDomElement tag = doc.createElement("misc");
745
p_pres.appendChild(tag);
747
tag.appendChild(textTag(doc, "askOnline", prefs.askOnline));
748
tag.appendChild(textTag(doc, "rosterAnim", prefs.rosterAnim));
749
tag.appendChild(textTag(doc, "autoVersion", prefs.autoVersion));
750
tag.appendChild(textTag(doc, "autoVCardOnLogin", prefs.autoVCardOnLogin));
751
tag.appendChild(textTag(doc, "xmlConsoleOnLogin", prefs.xmlConsoleOnLogin));
754
QDomElement tag = doc.createElement("autostatus");
755
p_pres.appendChild(tag);
759
e = textTag(doc, "away", prefs.asAway);
760
setBoolAttribute(e, "use", prefs.use_asAway);
763
e = textTag(doc, "xa", prefs.asXa);
764
setBoolAttribute(e, "use", prefs.use_asXa);
767
e = textTag(doc, "offline", prefs.asOffline);
768
setBoolAttribute(e, "use", prefs.use_asOffline);
771
tag.appendChild(textTag(doc, "message", prefs.asMessage));
774
p_pres.appendChild(prefs.sp.toXml(doc, "statuspresets"));
777
p_pres.appendChild(stringListToXml(doc, "recentstatus",prefs.recentStatus));
782
QDomElement p_lnf = doc.createElement("lookandfeel");
783
p.appendChild(p_lnf);
785
p_lnf.appendChild(textTag(doc, "newHeadings", prefs.clNewHeadings));
788
QDomElement tag = doc.createElement("colors");
789
p_lnf.appendChild(tag);
791
tag.appendChild(textTag(doc, "online", prefs.color[cOnline].name() ));
792
tag.appendChild(textTag(doc, "listback", prefs.color[cListBack].name() ));
793
tag.appendChild(textTag(doc, "away", prefs.color[cAway].name() ));
794
tag.appendChild(textTag(doc, "dnd", prefs.color[cDND].name() ));
795
tag.appendChild(textTag(doc, "offline", prefs.color[cOffline].name() ));
796
tag.appendChild(textTag(doc, "groupfore", prefs.color[cGroupFore].name() ));
797
tag.appendChild(textTag(doc, "groupback", prefs.color[cGroupBack].name() ));
798
tag.appendChild(textTag(doc, "animfront", prefs.color[cAnimFront].name() ));
799
tag.appendChild(textTag(doc, "animback", prefs.color[cAnimBack].name() ));
803
QDomElement tag = doc.createElement("fonts");
804
p_lnf.appendChild(tag);
806
tag.appendChild(textTag(doc, "roster", prefs.font[fRoster] ));
807
tag.appendChild(textTag(doc, "message", prefs.font[fMessage] ));
808
tag.appendChild(textTag(doc, "chat", prefs.font[fChat] ));
809
tag.appendChild(textTag(doc, "popup", prefs.font[fPopup] ));
814
QDomElement p_sound = doc.createElement("sound");
815
p.appendChild(p_sound);
817
p_sound.appendChild(textTag(doc, "player", prefs.player));
818
p_sound.appendChild(textTag(doc, "noawaysound", prefs.noAwaySound));
819
p_sound.appendChild(textTag(doc, "noGCSound", prefs.noGCSound));
822
QDomElement p_onevent = doc.createElement("onevent");
823
p_sound.appendChild(p_onevent);
825
p_onevent.appendChild(textTag(doc, "message", prefs.onevent[eMessage]));
826
p_onevent.appendChild(textTag(doc, "chat1", prefs.onevent[eChat1]));
827
p_onevent.appendChild(textTag(doc, "chat2", prefs.onevent[eChat2]));
828
p_onevent.appendChild(textTag(doc, "system", prefs.onevent[eSystem]));
829
p_onevent.appendChild(textTag(doc, "headline", prefs.onevent[eHeadline]));
830
p_onevent.appendChild(textTag(doc, "online", prefs.onevent[eOnline]));
831
p_onevent.appendChild(textTag(doc, "offline", prefs.onevent[eOffline]));
832
p_onevent.appendChild(textTag(doc, "send", prefs.onevent[eSend]));
833
p_onevent.appendChild(textTag(doc, "incoming_ft", prefs.onevent[eIncomingFT]));
834
p_onevent.appendChild(textTag(doc, "ft_complete", prefs.onevent[eFTComplete]));
839
QDomElement p_sizes = doc.createElement("sizes");
840
p.appendChild(p_sizes);
842
p_sizes.appendChild(textTag(doc, "eventdlg", prefs.sizeEventDlg));
843
p_sizes.appendChild(textTag(doc, "chatdlg", prefs.sizeChatDlg));
847
QDomElement p_toolbars = doc.createElement("toolbars");
848
p.appendChild(p_toolbars);
850
QValueList<Options::ToolbarPrefs>::Iterator it = prefs.toolbars.begin();
851
for ( ; it != prefs.toolbars.end(); ++it) {
852
Options::ToolbarPrefs tb = *it;
853
if ( tb.keys.size() ||
855
// tb.name != QObject::tr("<unnamed>") ) // don't save empty toolbars
857
QDomElement tb_prefs = doc.createElement("toolbar");
858
p_toolbars.appendChild(tb_prefs);
860
tb_prefs.appendChild(textTag(doc, "name", tb.name));
861
tb_prefs.appendChild(textTag(doc, "on", tb.on));
862
tb_prefs.appendChild(textTag(doc, "locked", tb.locked));
863
tb_prefs.appendChild(textTag(doc, "stretchable", tb.stretchable));
864
tb_prefs.appendChild(stringListToXml(doc, "keys", tb.keys));
866
QDomElement tb_position = doc.createElement("position");
867
tb_prefs.appendChild(tb_position);
870
Qt::Dock dock = tb.dock;
871
if (dock == Qt::DockTop)
873
else if (dock == Qt::DockBottom)
874
dockStr = "DockBottom";
875
else if (dock == Qt::DockLeft)
876
dockStr = "DockLeft";
877
else if (dock == Qt::DockRight)
878
dockStr = "DockRight";
879
else if (dock == Qt::DockMinimized)
880
dockStr = "DockMinimized";
881
else if (dock == Qt::DockTornOff)
882
dockStr = "DockTornOff";
883
else if (dock == Qt::DockUnmanaged)
884
dockStr = "DockUnmanaged";
886
tb_position.appendChild(textTag(doc, "dock", dockStr));
887
tb_position.appendChild(textTag(doc, "index", tb.index));
888
tb_position.appendChild(textTag(doc, "nl", tb.nl));
889
tb_position.appendChild(textTag(doc, "extraOffset", tb.extraOffset));
895
QDomElement pp = doc.createElement("popups");
897
pp.appendChild(textTag(doc, "on", prefs.ppIsOn));
898
pp.appendChild(textTag(doc, "online", prefs.ppOnline));
899
pp.appendChild(textTag(doc, "offline", prefs.ppOffline));
900
pp.appendChild(textTag(doc, "statusChange", prefs.ppStatus));
901
pp.appendChild(textTag(doc, "message", prefs.ppMessage));
902
pp.appendChild(textTag(doc, "chat", prefs.ppChat));
903
pp.appendChild(textTag(doc, "headline", prefs.ppHeadline));
904
pp.appendChild(textTag(doc, "jidClip", prefs.ppJidClip));
905
pp.appendChild(textTag(doc, "statusClip", prefs.ppStatusClip));
906
pp.appendChild(textTag(doc, "textClip", prefs.ppTextClip));
907
pp.appendChild(textTag(doc, "hideTime", prefs.ppHideTime));
908
pp.appendChild(textTag(doc, "borderColor", prefs.ppBorderColor.name()));
913
QDomElement gc = doc.createElement("groupchat");
915
gc.appendChild(stringListToXml(doc, "highlightwords", prefs.gcHighlights));
916
gc.appendChild(stringListToXml(doc, "nickcolors", prefs.gcNickColors));
917
gc.appendChild(textTag(doc, "nickcoloring", prefs.gcNickColoring));
918
gc.appendChild(textTag(doc, "highlighting", prefs.gcHighlighting));
922
QDomElement p_lockdown = doc.createElement("lockdown");
923
p.appendChild(p_lockdown);
924
p_lockdown.appendChild(textTag(doc, "roster", prefs.lockdown.roster));
925
p_lockdown.appendChild(textTag(doc, "options", prefs.lockdown.options));
926
p_lockdown.appendChild(textTag(doc, "profiles", prefs.lockdown.profiles));
927
p_lockdown.appendChild(textTag(doc, "services", prefs.lockdown.services));
928
p_lockdown.appendChild(textTag(doc, "accounts", prefs.lockdown.accounts));
932
QDomElement is = doc.createElement("iconset");
936
is.appendChild(textTag(doc, "system", prefs.systemIconset));
939
QDomElement is_roster = doc.createElement("roster");
940
is.appendChild(is_roster);
941
is_roster.appendChild(textTag(doc, "default", prefs.defaultRosterIconset));
945
QDomElement roster_service = doc.createElement("service");
946
is_roster.appendChild(roster_service);
948
QMapIterator<QString, QString> it = prefs.serviceRosterIconset.begin();
949
for ( ; it != prefs.serviceRosterIconset.end(); ++it) {
950
QDomElement item = doc.createElement("item");
951
roster_service.appendChild(item);
953
item.setAttribute("service", it.key());
954
item.setAttribute("iconset", it.data());
960
QDomElement roster_custom = doc.createElement("custom");
961
is_roster.appendChild(roster_custom);
963
QMapIterator<QString, QString> it = prefs.customRosterIconset.begin();
964
for ( ; it != prefs.customRosterIconset.end(); ++it) {
965
QDomElement item = doc.createElement("item");
966
roster_custom.appendChild(item);
968
item.setAttribute("regExp", it.key());
969
item.setAttribute("iconset", it.data());
975
QDomElement is_emoticons = doc.createElement("emoticons");
976
is.appendChild(is_emoticons);
978
QStringList::Iterator it = prefs.emoticons.begin();
979
for ( ; it != prefs.emoticons.end(); ++it)
980
is_emoticons.appendChild(textTag(doc, "item", *it));
986
QDomElement p_tip = doc.createElement("tipOfTheDay");
987
p.appendChild(p_tip);
989
p_tip.appendChild( textTag(doc, "show", prefs.showTips ) );
990
p_tip.appendChild( textTag(doc, "num", prefs.tipNum ) );
995
QDomElement p_disco = doc.createElement("disco");
996
p.appendChild(p_disco);
998
p_disco.appendChild( textTag(doc, "items", prefs.discoItems ) );
999
p_disco.appendChild( textTag(doc, "info", prefs.discoInfo ) );
1004
QDomElement p_dt = doc.createElement("dt");
1005
p.appendChild(p_dt);
1006
p_dt.appendChild( textTag(doc, "port", prefs.dtPort ) );
1007
p_dt.appendChild( textTag(doc, "external", prefs.dtExternal ) );
1011
if(!f.open(IO_WriteOnly))
1015
t.setEncoding(QTextStream::UnicodeUTF8);
1016
t << doc.toString();
1023
bool UserProfile::fromFile(const QString &fname)
1029
if(!f.open(IO_ReadOnly))
1031
if(!doc.setContent(&f))
1035
QDomElement base = doc.documentElement();
1036
if(base.tagName() != "psiconf")
1038
confver = base.attribute("version");
1039
if(confver != "1.0")
1042
readEntry(base, "progver", &progver);
1044
readRectEntry(base, "geom", &mwgeom);
1045
xmlToStringList(base, "recentGCList", &recentGCList);
1046
xmlToStringList(base, "recentBrowseList", &recentBrowseList);
1047
readEntry(base, "lastStatusString", &lastStatusString);
1048
readBoolEntry(base, "useSound", &useSound);
1051
QDomElement accs = findSubTag(base, "accounts", &found);
1053
for(QDomNode n = accs.firstChild(); !n.isNull(); n = n.nextSibling()) {
1054
QDomElement a = n.toElement();
1058
if(a.tagName() == "account") {
1066
// convert old proxy config into new
1067
for(UserAccountList::Iterator it = acc.begin(); it != acc.end(); ++it) {
1068
UserAccount &a = *it;
1069
if(a.proxy_type > 0) {
1071
p.name = QObject::tr("%1 Proxy").arg(a.name);
1073
p.settings.host = a.proxy_host;
1074
p.settings.port = a.proxy_port;
1075
p.settings.useAuth = !a.proxy_user.isEmpty();
1076
p.settings.user = a.proxy_user;
1077
p.settings.pass = a.proxy_pass;
1078
proxyList.append(p);
1080
a.proxy_index = proxyList.count(); // 1 and up are proxies
1084
QDomElement prox = findSubTag(base, "proxies", &found);
1086
QDomNodeList list = prox.elementsByTagName("proxy");
1087
for(uint n = 0; n < list.count(); ++n) {
1088
QDomElement e = list.item(n).toElement();
1092
readEntry(e, "name", &p.name);
1093
readEntry(e, "type", &p.type);
1096
QDomElement pset = e.elementsByTagName("proxySettings").item(0).toElement();
1098
p.settings.fromXml(pset);
1099
proxyList.append(p);
1103
QDomElement p = findSubTag(base, "preferences", &found);
1107
QDomElement p_general = findSubTag(p, "general", &found);
1111
QDomElement p_roster = findSubTag(p_general, "roster", &found);
1113
readBoolEntry(p_roster, "useleft", &prefs.useleft);
1114
readBoolEntry(p_roster, "singleclick", &prefs.singleclick);
1115
readNumEntry(p_roster, "defaultAction", &prefs.defaultAction);
1116
readBoolEntry(p_roster, "showself", &prefs.alwaysShowSelf);
1117
readBoolEntry(p_roster, "useTransportIconsForContacts", &prefs.useTransportIconsForContacts);
1119
QDomElement sorting = findSubTag(p_roster, "sortStyle", &found);
1123
readEntry(sorting, "contact", &name);
1124
if ( name == "alpha" )
1125
prefs.rosterContactSortStyle = Options::ContactSortStyle_Alpha;
1127
prefs.rosterContactSortStyle = Options::ContactSortStyle_Status;
1129
readEntry(sorting, "group", &name);
1130
if ( name == "rank" )
1131
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Rank;
1133
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Alpha;
1135
readEntry(sorting, "account", &name);
1136
if ( name == "rank" )
1137
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Rank;
1139
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Alpha;
1143
QDomElement tag = findSubTag(p_general, "misc", &found);
1145
readNumEntry(tag, "delChats", &prefs.delChats);
1146
readBoolEntry(tag, "showJoins", &prefs.showJoins);
1147
readNumEntry(tag, "browser", &prefs.browser);
1148
readEntry(tag, "customBrowser", &prefs.customBrowser);
1149
readEntry(tag, "customMailer", &prefs.customMailer);
1150
readBoolEntry(tag, "alwaysOnTop", &prefs.alwaysOnTop);
1151
readBoolEntry(tag, "keepSizes", &prefs.keepSizes);
1152
readBoolEntry(tag, "ignoreHeadline", &prefs.ignoreHeadline);
1153
readBoolEntry(tag, "ignoreNonRoster", &prefs.ignoreNonRoster);
1154
readBoolEntry(tag, "scrollTo", &prefs.scrollTo);
1155
readBoolEntry(tag, "useEmoticons", &prefs.useEmoticons);
1156
readBoolEntry(tag, "alertOpenChats", &prefs.alertOpenChats);
1157
readBoolEntry(tag, "raiseChatWindow", &prefs.raiseChatWindow);
1158
readBoolEntry(tag, "showSubjects", &prefs.showSubjects);
1159
readBoolEntry(tag, "chatSoftReturn", &prefs.chatSoftReturn);
1160
readBoolEntry(tag, "showGroupCounts", &prefs.showGroupCounts);
1161
readBoolEntry(tag, "showCounter", &prefs.showCounter);
1162
readBoolEntry(tag, "chatSays", &prefs.chatSays);
1163
readBoolEntry(tag, "jidComplete", &prefs.jidComplete);
1164
readBoolEntry(tag, "grabUrls", &prefs.grabUrls);
1165
readBoolEntry(tag, "smallChats", &prefs.smallChats);
1168
tag = findSubTag(p_general, "dock", &found);
1170
readBoolEntry(tag, "useDock", &prefs.useDock);
1171
readBoolEntry(tag, "dockDCstyle", &prefs.dockDCstyle);
1172
readBoolEntry(tag, "dockHideMW", &prefs.dockHideMW);
1173
readBoolEntry(tag, "dockToolMW", &prefs.dockToolMW);
1174
readBoolEntry(tag, "isWMDock", &prefs.isWMDock);
1177
/*tag = findSubTag(p_general, "security", &found);
1179
readEntry(tag, "pgp", &prefs.pgp);
1183
// Added by Kiko 020621: retrieves SSL cert chain validation configuration
1184
QDomElement p_ssl = findSubTag(p,"ssl",&found);
1186
readEntry(p_ssl, "trustedcertstoredir", &prefs.trustCertStoreDir);
1189
QDomElement p_events = findSubTag(p, "events", &found);
1193
readNumEntry(p_events, "alertstyle", &prefs.alertStyle);
1194
readBoolEntry(p_events, "autoAuth", &prefs.autoAuth);
1196
QDomElement tag = findSubTag(p_events, "receive", &found);
1198
readBoolEntry(tag, "popupMsgs", &prefs.popupMsgs);
1199
readBoolEntry(tag, "popupChats", &prefs.popupChats);
1200
readBoolEntry(tag, "popupHeadlines", &prefs.popupHeadlines);
1201
readBoolEntry(tag, "noAwayPopup", &prefs.noAwayPopup);
1202
readBoolEntry(tag, "noUnlistedPopup", &prefs.noUnlistedPopup);
1203
readBoolEntry(tag, "raise", &prefs.raise);
1204
readNumEntry(tag, "incomingAs", &prefs.incomingAs);
1207
tag = findSubTag(p_events, "priority", &found);
1209
readNumEntry(tag, "message", &prefs.eventPriorityMessage);
1210
readNumEntry(tag, "chat", &prefs.eventPriorityChat);
1211
readNumEntry(tag, "headline", &prefs.eventPriorityHeadline);
1212
readNumEntry(tag, "auth", &prefs.eventPriorityAuth);
1213
readNumEntry(tag, "file", &prefs.eventPriorityFile);
1217
QDomElement p_pres = findSubTag(p, "presence", &found);
1221
QDomElement tag = findSubTag(p_pres, "misc", &found);
1223
readBoolEntry(tag, "askOnline", &prefs.askOnline);
1224
readBoolEntry(tag, "rosterAnim", &prefs.rosterAnim);
1225
readBoolEntry(tag, "autoVersion", &prefs.autoVersion);
1226
readBoolEntry(tag, "autoVCardOnLogin", &prefs.autoVCardOnLogin);
1227
readBoolEntry(tag, "xmlConsoleOnLogin", &prefs.xmlConsoleOnLogin);
1230
tag = findSubTag(p_pres, "autostatus", &found);
1234
e = findSubTag(tag, "away", &found);
1236
if(e.hasAttribute("use"))
1237
readBoolAttribute(e, "use", &prefs.use_asAway);
1239
prefs.use_asAway = TRUE;
1241
e = findSubTag(tag, "xa", &found);
1243
if(e.hasAttribute("use"))
1244
readBoolAttribute(e, "use", &prefs.use_asXa);
1246
prefs.use_asXa = TRUE;
1248
e = findSubTag(tag, "offline", &found);
1250
if(e.hasAttribute("use"))
1251
readBoolAttribute(e, "use", &prefs.use_asOffline);
1253
prefs.use_asOffline = TRUE;
1256
readNumEntry(tag, "away", &prefs.asAway);
1257
readNumEntry(tag, "xa", &prefs.asXa);
1258
readNumEntry(tag, "offline", &prefs.asOffline);
1260
readEntry(tag, "message", &prefs.asMessage);
1263
tag = findSubTag(p_pres, "statuspresets", &found);
1265
prefs.sp.fromXml(tag);
1266
xmlToStringList(p_pres, "recentstatus", &prefs.recentStatus);
1269
QDomElement p_lnf = findSubTag(p, "lookandfeel", &found);
1273
readBoolEntry(p_lnf, "newHeadings", &prefs.clNewHeadings);
1275
QDomElement tag = findSubTag(p_lnf, "colors", &found);
1277
readColorEntry(tag, "online", &prefs.color[cOnline]);
1278
readColorEntry(tag, "listback", &prefs.color[cListBack]);
1279
readColorEntry(tag, "away", &prefs.color[cAway]);
1280
readColorEntry(tag, "dnd", &prefs.color[cDND]);
1281
readColorEntry(tag, "offline", &prefs.color[cOffline]);
1282
readColorEntry(tag, "groupfore", &prefs.color[cGroupFore]);
1283
readColorEntry(tag, "groupback", &prefs.color[cGroupBack]);
1284
readColorEntry(tag, "animfront", &prefs.color[cAnimFront]);
1285
readColorEntry(tag, "animback", &prefs.color[cAnimBack]);
1288
tag = findSubTag(p_lnf, "fonts", &found);
1290
readEntry(tag, "roster", &prefs.font[fRoster]);
1291
readEntry(tag, "message", &prefs.font[fMessage]);
1292
readEntry(tag, "chat", &prefs.font[fChat]);
1293
readEntry(tag, "popup", &prefs.font[fPopup]);
1297
QDomElement p_sound = findSubTag(p, "sound", &found);
1301
readEntry(p_sound, "player", &prefs.player);
1302
readBoolEntry(p_sound, "noawaysound", &prefs.noAwaySound);
1303
readBoolEntry(p_sound, "noGCSound", &prefs.noGCSound);
1305
QDomElement tag = findSubTag(p_sound, "onevent", &found);
1307
readEntry(tag, "message", &prefs.onevent[eMessage]);
1308
readEntry(tag, "chat1", &prefs.onevent[eChat1]);
1309
readEntry(tag, "chat2", &prefs.onevent[eChat2]);
1310
readEntry(tag, "system", &prefs.onevent[eSystem]);
1311
readEntry(tag, "headline", &prefs.onevent[eHeadline]);
1312
readEntry(tag, "online", &prefs.onevent[eOnline]);
1313
readEntry(tag, "offline", &prefs.onevent[eOffline]);
1314
readEntry(tag, "send", &prefs.onevent[eSend]);
1315
readEntry(tag, "incoming_ft", &prefs.onevent[eIncomingFT]);
1316
readEntry(tag, "ft_complete", &prefs.onevent[eFTComplete]);
1320
QDomElement p_sizes = findSubTag(p, "sizes", &found);
1322
readSizeEntry(p_sizes, "eventdlg", &prefs.sizeEventDlg);
1323
readSizeEntry(p_sizes, "chatdlg", &prefs.sizeChatDlg);
1327
QDomElement p_toolbars = findSubTag(p, "toolbars", &found);
1329
prefs.toolbars.clear();
1331
for(QDomNode n = p_toolbars.firstChild(); !n.isNull(); n = n.nextSibling()) {
1332
QDomElement e = n.toElement();
1336
if ( e.tagName().left(7) == "toolbar" ) {
1337
QDomElement tb_prefs = e;
1338
Options::ToolbarPrefs tb;
1340
readEntry(tb_prefs, "name", &tb.name);
1341
readBoolEntry(tb_prefs, "on", &tb.on);
1342
readBoolEntry(tb_prefs, "locked", &tb.locked);
1343
readBoolEntry(tb_prefs, "stretchable", &tb.stretchable);
1344
xmlToStringList(tb_prefs, "keys", &tb.keys);
1346
bool found3 = false;
1347
QDomElement tb_position = findSubTag(tb_prefs, "position", &found3);
1351
Qt::Dock dock = Qt::DockTop;
1352
readEntry(tb_position, "dock", &dockStr);
1353
if (dockStr == "DockTop")
1355
else if (dockStr == "DockBottom")
1356
dock = Qt::DockBottom;
1357
else if (dockStr == "DockLeft")
1358
dock = Qt::DockLeft;
1359
else if (dockStr == "DockRight")
1360
dock = Qt::DockRight;
1361
else if (dockStr == "DockMinimized")
1362
dock = Qt::DockMinimized;
1363
else if (dockStr == "DockTornOff")
1364
dock = Qt::DockTornOff;
1365
else if (dockStr == "DockUnmanaged")
1366
dock = Qt::DockUnmanaged;
1370
readNumEntry(tb_position, "index", &tb.index);
1371
readBoolEntry(tb_position, "nl", &tb.nl);
1372
readNumEntry(tb_position, "extraOffset", &tb.extraOffset);
1375
prefs.toolbars.append(tb);
1379
// event notifier in these versions was not implemented as an action, so add it
1380
if ( progver == "0.9" || progver == "0.9-CVS" ) {
1381
// at first, we need to scan the options, to determine, whether event_notifier already available
1383
QValueList<Options::ToolbarPrefs>::Iterator it = prefs.toolbars.begin();
1384
for ( ; it != prefs.toolbars.end(); ++it) {
1385
QStringList::Iterator it2 = (*it).keys.begin();
1386
for ( ; it2 != (*it).keys.end(); ++it2) {
1387
if ( *it2 == "event_notifier" ) {
1395
Options::ToolbarPrefs tb;
1396
tb.name = QObject::tr("Event notifier");
1399
tb.stretchable = true;
1400
tb.keys << "event_notifier";
1401
tb.dock = Qt::DockBottom;
1403
prefs.toolbars.append(tb);
1409
QDomElement p_groupchat = findSubTag(p, "groupchat", &found);
1411
readBoolEntry(p_groupchat, "nickcoloring", &prefs.gcNickColoring);
1412
readBoolEntry(p_groupchat, "highlighting", &prefs.gcHighlighting);
1413
xmlToStringList(p_groupchat, "highlightwords", &prefs.gcHighlights);
1414
xmlToStringList(p_groupchat, "nickcolors", &prefs.gcNickColors);
1417
QDomElement p_popup = findSubTag(p, "popups", &found);
1419
readBoolEntry(p_popup, "on", &prefs.ppIsOn);
1420
readBoolEntry(p_popup, "online", &prefs.ppOnline);
1421
readBoolEntry(p_popup, "offline", &prefs.ppOffline);
1422
readBoolEntry(p_popup, "statusChange", &prefs.ppStatus);
1423
readBoolEntry(p_popup, "message", &prefs.ppMessage);
1424
readBoolEntry(p_popup, "chat", &prefs.ppChat);
1425
readBoolEntry(p_popup, "headline", &prefs.ppHeadline);
1426
readNumEntry(p_popup, "jidClip", &prefs.ppJidClip);
1427
readNumEntry(p_popup, "statusClip", &prefs.ppStatusClip);
1428
readNumEntry(p_popup, "textClip", &prefs.ppTextClip);
1429
readNumEntry(p_popup, "hideTime", &prefs.ppHideTime);
1430
readColorEntry(p_popup, "borderColor", &prefs.ppBorderColor);
1433
QDomElement p_lockdown = findSubTag(p, "lockdown", &found);
1435
readBoolEntry(p_lockdown, "roster", &prefs.lockdown.roster);
1436
readBoolEntry(p_lockdown, "options", &prefs.lockdown.options);
1437
readBoolEntry(p_lockdown, "profiles", &prefs.lockdown.profiles);
1438
readBoolEntry(p_lockdown, "services", &prefs.lockdown.services);
1439
readBoolEntry(p_lockdown, "accounts", &prefs.lockdown.accounts);
1442
QDomElement p_iconset = findSubTag(p, "iconset", &found);
1444
readEntry(p_iconset, "system", &prefs.systemIconset);
1446
QDomElement roster = findSubTag(p_iconset, "roster", &found);
1448
readEntry(roster, "default", &prefs.defaultRosterIconset);
1450
QDomElement service = findSubTag(roster, "service", &found);
1452
prefs.serviceRosterIconset.clear();
1453
for (QDomNode n = service.firstChild(); !n.isNull(); n = n.nextSibling()) {
1454
QDomElement i = n.toElement();
1458
prefs.serviceRosterIconset[i.attribute("service")] = i.attribute("iconset");
1462
QDomElement custom = findSubTag(roster, "custom", &found);
1464
prefs.customRosterIconset.clear();
1465
for (QDomNode n = custom.firstChild(); !n.isNull(); n = n.nextSibling()) {
1466
QDomElement i = n.toElement();
1470
prefs.customRosterIconset[i.attribute("regExp")] = i.attribute("iconset");
1475
QDomElement emoticons = findSubTag(p_iconset, "emoticons", &found);
1477
prefs.emoticons.clear();
1478
for (QDomNode n = emoticons.firstChild(); !n.isNull(); n = n.nextSibling()) {
1479
QDomElement i = n.toElement();
1483
if ( i.tagName() == "item" ) {
1484
QString is = i.text();
1485
prefs.emoticons << is;
1491
QDomElement p_tip = findSubTag(p, "tipOfTheDay", &found);
1493
readBoolEntry(p_tip, "show", &prefs.showTips);
1494
readNumEntry(p_tip, "num", &prefs.tipNum);
1497
QDomElement p_disco = findSubTag(p, "disco", &found);
1499
readBoolEntry(p_disco, "items", &prefs.discoItems);
1500
readBoolEntry(p_disco, "info", &prefs.discoInfo);
1503
QDomElement p_dt = findSubTag(p, "dt", &found);
1505
readNumEntry(p_dt, "port", &prefs.dtPort);
1506
readEntry(p_dt, "external", &prefs.dtExternal);
1514
QString pathToProfile(const QString &name)
1516
return g.pathProfiles + "/" + name;
1519
QString pathToProfileConfig(const QString &name)
1521
return pathToProfile(name) + "/config.xml";
1524
QStringList getProfilesList()
1528
QDir d(g.pathProfiles);
1532
QStringList entries = d.entryList();
1533
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
1534
if(*it == "." || *it == "..")
1536
QFileInfo info(d, *it);
1548
bool profileExists(const QString &_name)
1550
QString name = _name.lower();
1552
QStringList list = getProfilesList();
1553
for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
1554
if((*it).lower() == name)
1560
bool profileNew(const QString &name)
1565
// verify the string is sane
1566
for(int n = 0; n < (int)name.length(); ++n) {
1567
if(!name.at(n).isLetterOrNumber())
1572
QDir d(g.pathProfiles);
1575
QDir p(g.pathProfiles + "/" + name);
1589
bool profileRename(const QString &oldname, const QString &name)
1591
// verify the string is sane
1592
for(int n = 0; n < (int)name.length(); ++n) {
1593
if(!name.at(n).isLetterOrNumber())
1597
// locate the folder
1598
QDir d(g.pathProfiles);
1601
if(!d.rename(oldname, name))
1607
static bool folderRemove(const QDir &_d)
1611
QStringList entries = d.entryList();
1612
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
1613
if(*it == "." || *it == "..")
1615
QFileInfo info(d, *it);
1617
if(!folderRemove(QDir(info.filePath())))
1621
//printf("deleting [%s]\n", info.filePath().latin1());
1622
d.remove(info.fileName());
1625
QString name = d.dirName();
1628
//printf("removing folder [%s]\n", d.filePath(name).latin1());
1634
bool profileDelete(const QString &path)
1640
return folderRemove(QDir(path));