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()
66
opt_ignoreSSLWarnings = false;
67
opt_passphrase = false;
72
proxy_type = PROXY_NONE;
83
UserAccount::~UserAccount()
87
// FIXME: this should be a const function (as should other ::toXml functions)
88
QDomElement UserAccount::toXml(QDomDocument &doc, const QString &tagName)
90
QDomElement a = doc.createElement(tagName);
92
setBoolAttribute(a, "enabled", opt_enabled);
93
setBoolAttribute(a, "auto", opt_auto);
94
setBoolAttribute(a, "ssl", opt_ssl);
95
setBoolAttribute(a, "showOffline", tog_offline);
96
setBoolAttribute(a, "showAway", tog_away);
97
setBoolAttribute(a, "showHidden", tog_hidden);
98
setBoolAttribute(a, "showAgents", tog_agents);
99
setBoolAttribute(a, "showSelf", tog_self);
100
setBoolAttribute(a, "keepAlive", opt_keepAlive);
101
setBoolAttribute(a, "plain", opt_plain);
102
setBoolAttribute(a, "log", opt_log);
103
setBoolAttribute(a, "reconn", opt_reconn);
104
setBoolAttribute(a, "ignoreSSLWarnings", opt_ignoreSSLWarnings);
105
//setBoolAttribute(a, "gpg", opt_gpg);
107
//QString jid = user + '@' + vhost;
108
a.appendChild(textTag(doc, "name", name));
109
a.appendChild(textTag(doc, "jid", jid));
111
a.appendChild(textTag(doc, "password", encodePassword(pass, jid) ));
112
a.appendChild(textTag(doc, "useHost", opt_host));
113
a.appendChild(textTag(doc, "host", host));
114
a.appendChild(textTag(doc, "port", QString::number(port)));
115
a.appendChild(textTag(doc, "resource", resource));
116
a.appendChild(textTag(doc, "priority", QString::number(priority)));
117
a.appendChild(textTag(doc, "OLR", olr_string));
118
a.appendChild(textTag(doc, "pgpSecretKeyID", pgpSecretKeyID));
121
a.appendChild(textTag(doc, "pgpPassphrase", encodePassword(pgpPassphrase, jid) ));
123
QDomElement r = doc.createElement("roster");
125
Roster::ConstIterator rit = roster.begin();
126
for ( ; rit != roster.end(); ++rit) {
127
const RosterItem &i = *rit;
128
QDomElement tag = i.toXml(&doc);
132
// now we check for redundant entries
133
QStringList groupList, removeList;
134
groupList << "/\\/" + name + "\\/\\"; // account name is a very 'special' group
136
// special groups that should also have their state remembered
137
groupList << ContactProfile::tr("General");
138
groupList << ContactProfile::tr("Agents/Transports");
140
// first, add all groups' names to groupList
141
rit = roster.begin();
142
for ( ; rit != roster.end(); ++rit) {
143
const RosterItem &i = *rit;
144
groupList += i.groups();
147
// now, check if there's groupState name entry in groupList
148
QMap<QString, GroupData>::Iterator git = groupState.begin();
149
for ( ; git != groupState.end(); ++git) {
152
QStringList::Iterator it = groupList.begin();
153
for ( ; it != groupList.end(); ++it)
154
if ( git.key() == *it ) {
160
removeList << git.key();
163
// remove redundant groups
164
QStringList::Iterator it = removeList.begin();
165
for ( ; it != removeList.end(); ++it)
166
groupState.remove( *it );
168
// and finally, save the data
169
QDomElement gs = doc.createElement("groupState");
171
git = groupState.begin();
172
for ( ; git != groupState.end(); ++git) {
173
//if ( !git.data().open || git.data().rank ) { // don't save unnecessary entries (the default is 'true' to open, and '0' to rank)
174
QDomElement group = doc.createElement("group");
175
group.setAttribute("name", git.key());
176
group.setAttribute("open", git.data().open ? "true" : "false");
177
group.setAttribute("rank", QString::number(git.data().rank));
178
gs.appendChild(group);
182
a.appendChild(textTag(doc, "proxyindex", QString::number(proxy_index)));
183
//a.appendChild(textTag(doc, "proxytype", QString::number(proxy_type)));
184
//a.appendChild(textTag(doc, "proxyhost", proxy_host));
185
//a.appendChild(textTag(doc, "proxyport", QString::number(proxy_port)));
186
//a.appendChild(textTag(doc, "proxyuser", proxy_user));
187
//a.appendChild(textTag(doc, "proxypass", encodePassword(proxy_pass, jid)));
189
a.appendChild(keybind.toXml(doc, "pgpkeybindings"));
190
a.appendChild(textTag(doc, "dtProxy", dtProxy.full()));
195
void UserAccount::fromXml(const QDomElement &a)
201
readEntry(a, "name", &name);
202
readBoolAttribute(a, "enabled", &opt_enabled);
203
readBoolAttribute(a, "auto", &opt_auto);
204
readBoolAttribute(a, "ssl", &opt_ssl);
205
readBoolAttribute(a, "showOffline", &tog_offline);
206
readBoolAttribute(a, "showAway", &tog_away);
207
readBoolAttribute(a, "showHidden", &tog_hidden);
208
readBoolAttribute(a, "showAgents", &tog_agents);
209
readBoolAttribute(a, "showSelf", &tog_self);
210
readBoolAttribute(a, "keepAlive", &opt_keepAlive);
211
readBoolAttribute(a, "plain", &opt_plain);
212
readBoolAttribute(a, "log", &opt_log);
213
readBoolAttribute(a, "reconn", &opt_reconn);
214
readBoolAttribute(a, "ignoreSSLWarnings", &opt_ignoreSSLWarnings);
215
//readBoolAttribute(a, "gpg", &opt_gpg);
217
readEntry(a, "host", &host);
218
readNumEntry(a, "port", &port);
221
QDomElement j = findSubTag(a, "jid", &found);
223
readBoolAttribute(j, "manual", &opt_host);
229
readEntry(a, "username", &user);
230
QDomElement j = findSubTag(a, "vhost", &found);
232
readBoolAttribute(j, "manual", &opt_host);
233
vhost = tagContent(j);
241
jid = user + '@' + vhost;
244
readBoolEntry(a, "useHost", &opt_host);
246
// read password (we must do this after reading the jid, to decode properly)
247
readEntry(a, "password", &pass);
251
pass = decodePassword(pass, jid);
255
readEntry(a, "resource", &resource);
256
readNumEntry(a, "priority", &priority);
257
readEntry(a, "OLR", &olr_string);
258
readEntry(a, "pgpSecretKeyID", &pgpSecretKeyID);
260
QDomElement pp = findSubTag(a, "pgpPassphrase", &found);
262
opt_passphrase = true;
263
pgpPassphrase = decodePassword(tagContent(pp), jid);
266
opt_passphrase = false;
268
QDomElement r = findSubTag(a, "roster", &found);
270
for(QDomNode n = r.firstChild(); !n.isNull(); n = n.nextSibling()) {
271
QDomElement i = n.toElement();
275
if(i.tagName() == "item") {
285
QDomElement gs = findSubTag(a, "groupState", &found);
287
for (QDomNode n = gs.firstChild(); !n.isNull(); n = n.nextSibling()) {
288
QDomElement i = n.toElement();
292
if (i.tagName() == "group") {
294
gd.open = i.attribute("open") == "true";
295
gd.rank = i.attribute("rank").toInt();
296
groupState.insert(i.attribute("name"), gd);
301
readNumEntry(a, "proxyindex", &proxy_index);
302
readNumEntry(a, "proxytype", &proxy_type);
303
readEntry(a, "proxyhost", &proxy_host);
304
readNumEntry(a, "proxyport", &proxy_port);
305
readEntry(a, "proxyuser", &proxy_user);
306
readEntry(a, "proxypass", &proxy_pass);
307
if(!proxy_pass.isEmpty())
308
proxy_pass = decodePassword(proxy_pass, jid);
310
r = findSubTag(a, "pgpkeybindings", &found);
315
readEntry(a, "dtProxy", &str);
319
UserProfile::UserProfile()
324
void UserProfile::reset()
327
nix = win = mac = FALSE;
339
progver = PROG_VERSION;
342
mwgeom.setRect(64, 64, 150, 360);
343
lastStatusString = "";
349
prefs.useleft = FALSE;
350
prefs.singleclick = FALSE;
351
prefs.defaultAction = 1;
352
prefs.delChats = dcHour;
353
prefs.showJoins = TRUE;
355
prefs.customBrowser = "";
356
prefs.customMailer = "";
357
prefs.alwaysOnTop = win ? TRUE : FALSE;
358
prefs.keepSizes = TRUE;
359
prefs.ignoreHeadline = FALSE;
360
prefs.ignoreNonRoster = FALSE;
361
prefs.excludeGroupChatsFromIgnore = TRUE;
362
prefs.useDock = win ? TRUE: FALSE;
363
prefs.dockDCstyle = win ? TRUE: FALSE;
364
prefs.dockHideMW = FALSE;
365
prefs.dockToolMW = FALSE;
366
prefs.isWMDock = false;
367
prefs.alertStyle = 2;
368
prefs.popupMsgs = FALSE;
369
prefs.popupChats = FALSE;
370
prefs.popupHeadlines = FALSE;
371
prefs.popupFiles = FALSE;
372
prefs.noAwayPopup = FALSE;
373
prefs.noUnlistedPopup = false;
375
prefs.incomingAs = 0;
376
prefs.askOnline = FALSE;
377
prefs.askOffline = FALSE;
378
prefs.rosterAnim = TRUE;
379
prefs.autoVersion = false;
380
prefs.autoVCardOnLogin = true;
381
prefs.xmlConsoleOnLogin = false;
385
prefs.use_asAway = TRUE;
386
prefs.use_asXa = TRUE;
387
prefs.use_asOffline = FALSE;
388
prefs.asMessage = QObject::tr("Auto Status (idle)");
389
prefs.scrollTo = TRUE;
390
prefs.useEmoticons = false;
391
prefs.alertOpenChats = false;
392
prefs.raiseChatWindow = false;
393
prefs.showSubjects = true;
394
prefs.showCounter = false;
395
prefs.chatSays = false;
396
prefs.chatSoftReturn = true;
397
prefs.showGroupCounts = true;
398
prefs.smallChats = false;
401
prefs.sp.set(QObject::tr("Away from desk"), QObject::tr("I am away from my desk. Leave a message."));
402
prefs.sp.set(QObject::tr("Showering"), QObject::tr("I'm in the shower. You'll have to wait for me to get out."));
403
prefs.sp.set(QObject::tr("Eating"), QObject::tr("Out eating. Mmmm.. food."));
404
prefs.sp.set(QObject::tr("Sleep"), QObject::tr("Sleep is good. Zzzzz"));
405
prefs.sp.set(QObject::tr("Work"), QObject::tr("Can't chat. Gotta work."));
406
prefs.sp.set(QObject::tr("Air"), QObject::tr("Stepping out to get some fresh air."));
407
prefs.sp.set(QObject::tr("Movie"), QObject::tr("Out to a movie. Is that OK with you?"));
408
prefs.sp.set(QObject::tr("Secret"), QObject::tr("I'm not available right now and that's all you need to know."));
409
prefs.sp.set(QObject::tr("Out for the night"), QObject::tr("Out for the night."));
410
prefs.sp.set(QObject::tr("Greece"), QObject::tr("I have gone to a far away place. I will be back someday!"));
411
prefs.recentStatus.clear();
414
prefs.color[cOnline] = QColor("#31549F");
415
prefs.color[cListBack] = QColor("#F0F0F0");
416
prefs.color[cAway] = QColor("#3A8268");
417
prefs.color[cDND] = QColor("#800000");
418
prefs.color[cOffline] = QColor("#000000");
419
prefs.color[cGroupFore] = QColor("#000000");
420
prefs.color[cGroupBack] = QColor("#9CBCFE");
421
prefs.color[cAnimFront] = QColor("#FF0000");
422
prefs.color[cAnimBack] = QColor("#000000");
424
prefs.color[cOnline] = QColor("#0060C0");
425
prefs.color[cListBack] = QColor("#C0C0C0");
426
prefs.color[cAway] = QColor("#008080");
427
prefs.color[cDND] = QColor("#800000");
428
prefs.color[cOffline] = QColor("#000000");
429
prefs.color[cGroupFore] = QColor("#000000");
430
prefs.color[cGroupBack] = QColor("#FFFFFF");
431
prefs.color[cAnimFront] = QColor("#FF0000");
432
prefs.color[cAnimBack] = QColor("#000000");
435
prefs.font[fRoster] = QApplication::font().toString();
436
prefs.font[fMessage] = QApplication::font().toString();
437
prefs.font[fChat] = QApplication::font().toString();
439
QFont font = QApplication::font();
440
font.setPointSize( font.pointSize() - 2 );
441
prefs.font[fPopup] = font.toString();
444
// calculate the small font size
445
const int minimumFontSize = 7;
446
prefs.smallFontSize = qApp->font().pointSize();
447
prefs.smallFontSize -= 2;
448
if ( prefs.smallFontSize < minimumFontSize )
449
prefs.smallFontSize = minimumFontSize;
450
FancyLabel::setSmallFontSize( prefs.smallFontSize );
452
prefs.clNewHeadings = true;
454
prefs.player = "play";
455
prefs.noAwaySound = FALSE;
457
prefs.onevent[eMessage] = g.pathBase + "/sound/chat2.wav";
458
prefs.onevent[eChat1] = g.pathBase + "/sound/chat1.wav";
459
prefs.onevent[eChat2] = g.pathBase + "/sound/chat2.wav";
460
prefs.onevent[eSystem] = g.pathBase + "/sound/chat2.wav";
461
prefs.onevent[eHeadline] = g.pathBase + "/sound/chat2.wav";
462
prefs.onevent[eOnline] = g.pathBase + "/sound/online.wav";
463
prefs.onevent[eOffline] = g.pathBase + "/sound/offline.wav";
464
prefs.onevent[eSend] = g.pathBase + "/sound/send.wav";
465
prefs.onevent[eIncomingFT] = g.pathBase + "/sound/ft_incoming.wav";
466
prefs.onevent[eFTComplete] = g.pathBase + "/sound/ft_complete.wav";
468
// Added by Kiko 020621: sets up the default certificate store
469
prefs.trustCertStoreDir = g.pathBase + "/certs";
471
prefs.sizeEventDlg = EventDlg::defaultSize();
472
prefs.sizeChatDlg = ChatDlg::defaultSize();
474
prefs.jidComplete = true;
475
prefs.grabUrls = false;
476
prefs.noGCSound = true;
481
prefs.toolbars.clear();
483
Options::ToolbarPrefs tbDef;
484
tbDef.name = QString::null;
486
tbDef.locked = false;
487
tbDef.stretchable = false;
490
tbDef.dock = Qt::DockTop;
492
tbDef.extraOffset = 0;
497
Options::ToolbarPrefs tb[3];
499
for (i = 0; i < sizeof(tb)/sizeof(Options::ToolbarPrefs); i++) {
504
bool defaultEnableToolbars;
506
defaultEnableToolbars = false;
508
defaultEnableToolbars = true;
511
// Imitate old Psi button layout by default
512
tb[0].name = QObject::tr("Buttons");
513
tb[0].on = defaultEnableToolbars;
515
tb[0].stretchable = true;
516
tb[0].keys << "button_options" << "button_status";
517
tb[0].dock = Qt::DockBottom;
519
tb[1].name = QObject::tr("Show contacts");
520
tb[1].on = defaultEnableToolbars;
522
tb[1].keys << "show_offline" << "show_away" << "show_agents" << "show_self";
524
tb[2].name = QObject::tr("Event notifier");
527
tb[2].stretchable = true;
528
tb[2].keys << "event_notifier";
529
tb[2].dock = Qt::DockBottom;
532
for ( i = 0; i < sizeof(tb)/sizeof(Options::ToolbarPrefs); i++ )
533
prefs.toolbars["mainWin"].append( tb[i] );
537
prefs.gcHighlighting = true;
538
prefs.gcHighlights.clear();
540
prefs.gcNickColoring = true;
541
prefs.gcNickColors.clear();
543
prefs.gcNickColors << "Blue";
544
prefs.gcNickColors << "Green";
545
prefs.gcNickColors << "Orange";
546
prefs.gcNickColors << "Purple";
547
prefs.gcNickColors << "Red";
550
prefs.ppIsOn = false;
551
prefs.ppOnline = true;
552
prefs.ppOffline = true;
553
prefs.ppStatus = false;
554
prefs.ppMessage = true;
556
prefs.ppHeadline = true;
558
prefs.ppJidClip = 25;
559
prefs.ppStatusClip = -1;
560
prefs.ppTextClip = 300;
561
prefs.ppHideTime = 10000; // 10 sec
562
prefs.ppBorderColor = QColor (0x52, 0x97, 0xF9);
565
prefs.lockdown.roster = false;
566
prefs.lockdown.options = false;
567
prefs.lockdown.profiles = false;
568
prefs.lockdown.services = false;
569
prefs.lockdown.accounts = false;
571
prefs.useTransportIconsForContacts = false;
574
prefs.systemIconset = "default";
575
prefs.emoticons = "default";
576
prefs.defaultRosterIconset = "default";
578
prefs.serviceRosterIconset.clear();
579
prefs.serviceRosterIconset["transport"] = "transport";
580
prefs.serviceRosterIconset["aim"] = "aim";
581
prefs.serviceRosterIconset["gadugadu"] = "gadugadu";
582
prefs.serviceRosterIconset["icq"] = "icq";
583
prefs.serviceRosterIconset["msn"] = "msn";
584
prefs.serviceRosterIconset["yahoo"] = "yahoo";
585
prefs.serviceRosterIconset["sms"] = "sms";
587
prefs.customRosterIconset.clear();
590
prefs.rosterContactSortStyle = Options::ContactSortStyle_Status;
591
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Alpha;
592
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Alpha;
595
prefs.showTips = true;
599
prefs.discoItems = true;
600
prefs.discoInfo = true;
603
prefs.autoAuth = false;
606
prefs.messageEvents = true;
609
prefs.eventPriorityHeadline = 0;
610
prefs.eventPriorityChat = 1;
611
prefs.eventPriorityMessage = 1;
612
prefs.eventPriorityAuth = 2;
613
prefs.eventPriorityFile = 3;
617
prefs.dtExternal = "";
620
//prefs.avatarsEnabled = true;
621
//prefs.avatarsChatdlgEnabled = true;
622
//prefs.avatarsSize = 48;
625
static Options::ToolbarPrefs loadToolbarData( const QDomElement &e )
627
QDomElement tb_prefs = e;
628
Options::ToolbarPrefs tb;
630
readEntry(tb_prefs, "name", &tb.name);
631
readBoolEntry(tb_prefs, "on", &tb.on);
632
readBoolEntry(tb_prefs, "locked", &tb.locked);
633
readBoolEntry(tb_prefs, "stretchable", &tb.stretchable);
634
xmlToStringList(tb_prefs, "keys", &tb.keys);
637
QDomElement tb_position = findSubTag(tb_prefs, "position", &found3);
641
Qt::Dock dock = Qt::DockTop;
642
readEntry(tb_position, "dock", &dockStr);
643
if (dockStr == "DockTop")
645
else if (dockStr == "DockBottom")
646
dock = Qt::DockBottom;
647
else if (dockStr == "DockLeft")
649
else if (dockStr == "DockRight")
650
dock = Qt::DockRight;
651
else if (dockStr == "DockMinimized")
652
dock = Qt::DockMinimized;
653
else if (dockStr == "DockTornOff")
654
dock = Qt::DockTornOff;
655
else if (dockStr == "DockUnmanaged")
656
dock = Qt::DockUnmanaged;
660
readNumEntry(tb_position, "index", &tb.index);
661
readBoolEntry(tb_position, "nl", &tb.nl);
662
readNumEntry(tb_position, "extraOffset", &tb.extraOffset);
668
bool UserProfile::toFile(const QString &fname)
672
QDomElement base = doc.createElement("psiconf");
673
base.setAttribute("version", "1.0");
674
doc.appendChild(base);
676
base.appendChild(textTag(doc, "progver", PROG_VERSION));
677
base.appendChild(textTag(doc, "geom", mwgeom));
678
base.appendChild(stringListToXml(doc, "recentGCList", recentGCList));
679
base.appendChild(stringListToXml(doc, "recentBrowseList", recentBrowseList));
680
base.appendChild(textTag(doc, "lastStatusString", lastStatusString));
681
base.appendChild(textTag(doc, "useSound", useSound));
683
QDomElement accs = doc.createElement("accounts");
684
base.appendChild(accs);
685
for(UserAccountList::Iterator ai = acc.begin(); ai != acc.end(); ++ai)
686
accs.appendChild((*ai).toXml(doc, "account"));
688
QDomElement prox = doc.createElement("proxies");
689
base.appendChild(prox);
690
for(ProxyItemList::Iterator pi = proxyList.begin(); pi != proxyList.end(); ++pi) {
691
const ProxyItem &p = *pi;
692
QDomElement i = doc.createElement("proxy");
693
i.appendChild(textTag(doc, "name", p.name));
694
i.appendChild(textTag(doc, "type", p.type));
695
i.appendChild(p.settings.toXml(&doc));
699
QDomElement p = doc.createElement("preferences");
703
QDomElement p_general = doc.createElement("general");
704
p.appendChild(p_general);
707
QDomElement p_roster = doc.createElement("roster");
708
p_general.appendChild(p_roster);
710
p_roster.appendChild(textTag(doc, "useleft", prefs.useleft));
711
p_roster.appendChild(textTag(doc, "singleclick", prefs.singleclick));
712
p_roster.appendChild(textTag(doc, "defaultAction", prefs.defaultAction));
713
p_roster.appendChild(textTag(doc, "useTransportIconsForContacts", prefs.useTransportIconsForContacts));
716
QDomElement sorting = doc.createElement("sortStyle");
717
p_roster.appendChild(sorting);
719
QString name = "status";
720
if ( prefs.rosterContactSortStyle == Options::ContactSortStyle_Alpha )
722
sorting.appendChild(textTag(doc, "contact", name));
725
if ( prefs.rosterGroupSortStyle == Options::GroupSortStyle_Rank )
727
sorting.appendChild(textTag(doc, "group", name));
730
if ( prefs.rosterAccountSortStyle == Options::AccountSortStyle_Rank )
732
sorting.appendChild(textTag(doc, "account", name));
738
//QDomElement p_avatars = doc.createElement("avatars");
739
//p_general.appendChild(p_avatars);
740
//p_avatars.appendChild(textTag(doc, "use", prefs.avatarsEnabled));
741
//p_avatars.appendChild(textTag(doc, "use_chatdlg", prefs.avatarsChatdlgEnabled));
742
//p_avatars.appendChild(textTag(doc, "size", prefs.avatarsSize));
745
QDomElement p_misc = doc.createElement("misc");
746
p_general.appendChild(p_misc);
748
p_misc.appendChild(textTag(doc, "smallChats", prefs.smallChats));
749
p_misc.appendChild(textTag(doc, "delChats", prefs.delChats));
750
p_misc.appendChild(textTag(doc, "showJoins", prefs.showJoins));
751
p_misc.appendChild(textTag(doc, "browser", prefs.browser));
752
p_misc.appendChild(textTag(doc, "customBrowser", prefs.customBrowser));
753
p_misc.appendChild(textTag(doc, "customMailer", prefs.customMailer));
754
p_misc.appendChild(textTag(doc, "alwaysOnTop", prefs.alwaysOnTop));
755
p_misc.appendChild(textTag(doc, "keepSizes", prefs.keepSizes));
756
p_misc.appendChild(textTag(doc, "ignoreHeadline", prefs.ignoreHeadline));
757
p_misc.appendChild(textTag(doc, "ignoreNonRoster", prefs.ignoreNonRoster));
758
p_misc.appendChild(textTag(doc, "excludeGroupChatIgnore", prefs.excludeGroupChatsFromIgnore));
759
p_misc.appendChild(textTag(doc, "scrollTo", prefs.scrollTo));
760
p_misc.appendChild(textTag(doc, "useEmoticons", prefs.useEmoticons));
761
p_misc.appendChild(textTag(doc, "alertOpenChats", prefs.alertOpenChats));
762
p_misc.appendChild(textTag(doc, "raiseChatWindow", prefs.raiseChatWindow));
763
p_misc.appendChild(textTag(doc, "showSubjects", prefs.showSubjects));
764
p_misc.appendChild(textTag(doc, "showCounter", prefs.showCounter));
765
p_misc.appendChild(textTag(doc, "chatSays", prefs.chatSays));
766
p_misc.appendChild(textTag(doc, "chatSoftReturn", prefs.chatSoftReturn));
767
p_misc.appendChild(textTag(doc, "showGroupCounts", prefs.showGroupCounts));
768
p_misc.appendChild(textTag(doc, "jidComplete", prefs.jidComplete));
769
p_misc.appendChild(textTag(doc, "grabUrls", prefs.grabUrls));
770
p_misc.appendChild(textTag(doc, "messageEvents", prefs.messageEvents));
773
QDomElement p_dock = doc.createElement("dock");
774
p_general.appendChild(p_dock);
776
p_dock.appendChild(textTag(doc, "useDock", prefs.useDock));
777
p_dock.appendChild(textTag(doc, "dockDCstyle", prefs.dockDCstyle));
778
p_dock.appendChild(textTag(doc, "dockHideMW", prefs.dockHideMW));
779
p_dock.appendChild(textTag(doc, "dockToolMW", prefs.dockToolMW));
780
p_dock.appendChild(textTag(doc, "isWMDock", prefs.isWMDock));
783
QDomElement p_sec = doc.createElement("security");
784
p_general.appendChild(p_sec);
786
p_sec.appendChild(textTag(doc, "pgp", prefs.pgp));
790
// Added by Kiko 020621: stores SSL cert chain validation configuration
792
QDomElement p_ssl = doc.createElement("ssl");
793
p.appendChild(p_ssl);
795
p_ssl.appendChild(textTag(doc, "trustedcertstoredir", prefs.trustCertStoreDir));
799
QDomElement p_events = doc.createElement("events");
800
p.appendChild(p_events);
802
p_events.appendChild(textTag(doc, "alertstyle", prefs.alertStyle));
803
p_events.appendChild(textTag(doc, "autoAuth", prefs.autoAuth));
807
QDomElement p_receive = doc.createElement("receive");
808
p_events.appendChild(p_receive);
810
p_receive.appendChild(textTag(doc, "popupMsgs", prefs.popupMsgs));
811
p_receive.appendChild(textTag(doc, "popupChats", prefs.popupChats));
812
p_receive.appendChild(textTag(doc, "popupHeadlines", prefs.popupHeadlines));
813
p_receive.appendChild(textTag(doc, "popupFiles", prefs.popupFiles));
814
p_receive.appendChild(textTag(doc, "noAwayPopup", prefs.noAwayPopup));
815
p_receive.appendChild(textTag(doc, "noUnlistedPopup", prefs.noUnlistedPopup));
816
p_receive.appendChild(textTag(doc, "raise", prefs.raise));
817
p_receive.appendChild(textTag(doc, "incomingAs", prefs.incomingAs));
821
QDomElement p_priority = doc.createElement("priority");
822
p_events.appendChild(p_priority);
824
p_priority.appendChild(textTag(doc, "message", prefs.eventPriorityMessage));
825
p_priority.appendChild(textTag(doc, "chat", prefs.eventPriorityChat));
826
p_priority.appendChild(textTag(doc, "headline", prefs.eventPriorityHeadline));
827
p_priority.appendChild(textTag(doc, "auth", prefs.eventPriorityAuth));
828
p_priority.appendChild(textTag(doc, "file", prefs.eventPriorityFile));
833
QDomElement p_pres = doc.createElement("presence");
834
p.appendChild(p_pres);
837
QDomElement tag = doc.createElement("misc");
838
p_pres.appendChild(tag);
840
tag.appendChild(textTag(doc, "askOnline", prefs.askOnline));
841
tag.appendChild(textTag(doc, "askOffline", prefs.askOffline));
842
tag.appendChild(textTag(doc, "rosterAnim", prefs.rosterAnim));
843
tag.appendChild(textTag(doc, "autoVersion", prefs.autoVersion));
844
tag.appendChild(textTag(doc, "autoVCardOnLogin", prefs.autoVCardOnLogin));
845
tag.appendChild(textTag(doc, "xmlConsoleOnLogin", prefs.xmlConsoleOnLogin));
848
QDomElement tag = doc.createElement("autostatus");
849
p_pres.appendChild(tag);
853
e = textTag(doc, "away", prefs.asAway);
854
setBoolAttribute(e, "use", prefs.use_asAway);
857
e = textTag(doc, "xa", prefs.asXa);
858
setBoolAttribute(e, "use", prefs.use_asXa);
861
e = textTag(doc, "offline", prefs.asOffline);
862
setBoolAttribute(e, "use", prefs.use_asOffline);
865
tag.appendChild(textTag(doc, "message", prefs.asMessage));
868
p_pres.appendChild(prefs.sp.toXml(doc, "statuspresets"));
871
p_pres.appendChild(stringListToXml(doc, "recentstatus",prefs.recentStatus));
876
QDomElement p_lnf = doc.createElement("lookandfeel");
877
p.appendChild(p_lnf);
879
p_lnf.appendChild(textTag(doc, "newHeadings", prefs.clNewHeadings));
882
QDomElement tag = doc.createElement("colors");
883
p_lnf.appendChild(tag);
885
tag.appendChild(textTag(doc, "online", prefs.color[cOnline].name() ));
886
tag.appendChild(textTag(doc, "listback", prefs.color[cListBack].name() ));
887
tag.appendChild(textTag(doc, "away", prefs.color[cAway].name() ));
888
tag.appendChild(textTag(doc, "dnd", prefs.color[cDND].name() ));
889
tag.appendChild(textTag(doc, "offline", prefs.color[cOffline].name() ));
890
tag.appendChild(textTag(doc, "groupfore", prefs.color[cGroupFore].name() ));
891
tag.appendChild(textTag(doc, "groupback", prefs.color[cGroupBack].name() ));
892
tag.appendChild(textTag(doc, "animfront", prefs.color[cAnimFront].name() ));
893
tag.appendChild(textTag(doc, "animback", prefs.color[cAnimBack].name() ));
897
QDomElement tag = doc.createElement("fonts");
898
p_lnf.appendChild(tag);
900
tag.appendChild(textTag(doc, "roster", prefs.font[fRoster] ));
901
tag.appendChild(textTag(doc, "message", prefs.font[fMessage] ));
902
tag.appendChild(textTag(doc, "chat", prefs.font[fChat] ));
903
tag.appendChild(textTag(doc, "popup", prefs.font[fPopup] ));
908
QDomElement p_sound = doc.createElement("sound");
909
p.appendChild(p_sound);
911
p_sound.appendChild(textTag(doc, "player", prefs.player));
912
p_sound.appendChild(textTag(doc, "noawaysound", prefs.noAwaySound));
913
p_sound.appendChild(textTag(doc, "noGCSound", prefs.noGCSound));
916
QDomElement p_onevent = doc.createElement("onevent");
917
p_sound.appendChild(p_onevent);
919
p_onevent.appendChild(textTag(doc, "message", prefs.onevent[eMessage]));
920
p_onevent.appendChild(textTag(doc, "chat1", prefs.onevent[eChat1]));
921
p_onevent.appendChild(textTag(doc, "chat2", prefs.onevent[eChat2]));
922
p_onevent.appendChild(textTag(doc, "system", prefs.onevent[eSystem]));
923
p_onevent.appendChild(textTag(doc, "headline", prefs.onevent[eHeadline]));
924
p_onevent.appendChild(textTag(doc, "online", prefs.onevent[eOnline]));
925
p_onevent.appendChild(textTag(doc, "offline", prefs.onevent[eOffline]));
926
p_onevent.appendChild(textTag(doc, "send", prefs.onevent[eSend]));
927
p_onevent.appendChild(textTag(doc, "incoming_ft", prefs.onevent[eIncomingFT]));
928
p_onevent.appendChild(textTag(doc, "ft_complete", prefs.onevent[eFTComplete]));
933
QDomElement p_sizes = doc.createElement("sizes");
934
p.appendChild(p_sizes);
936
p_sizes.appendChild(textTag(doc, "eventdlg", prefs.sizeEventDlg));
937
p_sizes.appendChild(textTag(doc, "chatdlg", prefs.sizeChatDlg));
941
QDomElement p_toolbars = doc.createElement("toolbars");
942
p.appendChild(p_toolbars);
944
QMap< QString, QValueList<Options::ToolbarPrefs> >::Iterator itBars = prefs.toolbars.begin();
945
for ( ; itBars != prefs.toolbars.end(); ++itBars ) {
946
QValueList<Options::ToolbarPrefs> toolbars = itBars.data();
947
QDomElement p_bars = doc.createElement( itBars.key() );
948
p_toolbars.appendChild( p_bars );
950
QValueList<Options::ToolbarPrefs>::Iterator it = toolbars.begin();
951
for ( ; it != toolbars.end(); ++it) {
952
Options::ToolbarPrefs tb = *it;
953
if ( tb.keys.size() ||
956
QDomElement tb_prefs = doc.createElement("toolbar");
957
p_bars.appendChild(tb_prefs);
959
tb_prefs.appendChild(textTag(doc, "name", tb.name));
960
tb_prefs.appendChild(textTag(doc, "on", tb.on));
961
tb_prefs.appendChild(textTag(doc, "locked", tb.locked));
962
tb_prefs.appendChild(textTag(doc, "stretchable", tb.stretchable));
963
tb_prefs.appendChild(stringListToXml(doc, "keys", tb.keys));
965
QDomElement tb_position = doc.createElement("position");
966
tb_prefs.appendChild(tb_position);
969
Qt::Dock dock = tb.dock;
970
if (dock == Qt::DockTop)
972
else if (dock == Qt::DockBottom)
973
dockStr = "DockBottom";
974
else if (dock == Qt::DockLeft)
975
dockStr = "DockLeft";
976
else if (dock == Qt::DockRight)
977
dockStr = "DockRight";
978
else if (dock == Qt::DockMinimized)
979
dockStr = "DockMinimized";
980
else if (dock == Qt::DockTornOff)
981
dockStr = "DockTornOff";
982
else if (dock == Qt::DockUnmanaged)
983
dockStr = "DockUnmanaged";
985
tb_position.appendChild(textTag(doc, "dock", dockStr));
986
tb_position.appendChild(textTag(doc, "index", tb.index));
987
tb_position.appendChild(textTag(doc, "nl", tb.nl));
988
tb_position.appendChild(textTag(doc, "extraOffset", tb.extraOffset));
995
QDomElement pp = doc.createElement("popups");
997
pp.appendChild(textTag(doc, "on", prefs.ppIsOn));
998
pp.appendChild(textTag(doc, "online", prefs.ppOnline));
999
pp.appendChild(textTag(doc, "offline", prefs.ppOffline));
1000
pp.appendChild(textTag(doc, "statusChange", prefs.ppStatus));
1001
pp.appendChild(textTag(doc, "message", prefs.ppMessage));
1002
pp.appendChild(textTag(doc, "chat", prefs.ppChat));
1003
pp.appendChild(textTag(doc, "headline", prefs.ppHeadline));
1004
pp.appendChild(textTag(doc, "file", prefs.ppFile));
1005
pp.appendChild(textTag(doc, "jidClip", prefs.ppJidClip));
1006
pp.appendChild(textTag(doc, "statusClip", prefs.ppStatusClip));
1007
pp.appendChild(textTag(doc, "textClip", prefs.ppTextClip));
1008
pp.appendChild(textTag(doc, "hideTime", prefs.ppHideTime));
1009
pp.appendChild(textTag(doc, "borderColor", prefs.ppBorderColor.name()));
1014
QDomElement gc = doc.createElement("groupchat");
1016
gc.appendChild(stringListToXml(doc, "highlightwords", prefs.gcHighlights));
1017
gc.appendChild(stringListToXml(doc, "nickcolors", prefs.gcNickColors));
1018
gc.appendChild(textTag(doc, "nickcoloring", prefs.gcNickColoring));
1019
gc.appendChild(textTag(doc, "highlighting", prefs.gcHighlighting));
1023
QDomElement p_lockdown = doc.createElement("lockdown");
1024
p.appendChild(p_lockdown);
1025
p_lockdown.appendChild(textTag(doc, "roster", prefs.lockdown.roster));
1026
p_lockdown.appendChild(textTag(doc, "options", prefs.lockdown.options));
1027
p_lockdown.appendChild(textTag(doc, "profiles", prefs.lockdown.profiles));
1028
p_lockdown.appendChild(textTag(doc, "services", prefs.lockdown.services));
1029
p_lockdown.appendChild(textTag(doc, "accounts", prefs.lockdown.accounts));
1033
QDomElement is = doc.createElement("iconset");
1037
is.appendChild(textTag(doc, "system", prefs.systemIconset));
1040
QDomElement is_roster = doc.createElement("roster");
1041
is.appendChild(is_roster);
1042
is_roster.appendChild(textTag(doc, "default", prefs.defaultRosterIconset));
1046
QDomElement roster_service = doc.createElement("service");
1047
is_roster.appendChild(roster_service);
1049
QMapIterator<QString, QString> it = prefs.serviceRosterIconset.begin();
1050
for ( ; it != prefs.serviceRosterIconset.end(); ++it) {
1051
QDomElement item = doc.createElement("item");
1052
roster_service.appendChild(item);
1054
item.setAttribute("service", it.key());
1055
item.setAttribute("iconset", it.data());
1061
QDomElement roster_custom = doc.createElement("custom");
1062
is_roster.appendChild(roster_custom);
1064
QMapIterator<QString, QString> it = prefs.customRosterIconset.begin();
1065
for ( ; it != prefs.customRosterIconset.end(); ++it) {
1066
QDomElement item = doc.createElement("item");
1067
roster_custom.appendChild(item);
1069
item.setAttribute("regExp", it.key());
1070
item.setAttribute("iconset", it.data());
1076
QDomElement is_emoticons = doc.createElement("emoticons");
1077
is.appendChild(is_emoticons);
1079
QStringList::Iterator it = prefs.emoticons.begin();
1080
for ( ; it != prefs.emoticons.end(); ++it)
1081
is_emoticons.appendChild(textTag(doc, "item", *it));
1087
QDomElement p_tip = doc.createElement("tipOfTheDay");
1088
p.appendChild(p_tip);
1090
p_tip.appendChild( textTag(doc, "show", prefs.showTips ) );
1091
p_tip.appendChild( textTag(doc, "num", prefs.tipNum ) );
1096
QDomElement p_disco = doc.createElement("disco");
1097
p.appendChild(p_disco);
1099
p_disco.appendChild( textTag(doc, "items", prefs.discoItems ) );
1100
p_disco.appendChild( textTag(doc, "info", prefs.discoInfo ) );
1105
QDomElement p_dt = doc.createElement("dt");
1106
p.appendChild(p_dt);
1107
p_dt.appendChild( textTag(doc, "port", prefs.dtPort ) );
1108
p_dt.appendChild( textTag(doc, "external", prefs.dtExternal ) );
1112
if(!f.open(IO_WriteOnly))
1116
t.setEncoding(QTextStream::UnicodeUTF8);
1117
t << doc.toString();
1124
bool UserProfile::fromFile(const QString &fname)
1130
if(!f.open(IO_ReadOnly))
1132
if(!doc.setContent(&f))
1136
QDomElement base = doc.documentElement();
1137
if(base.tagName() != "psiconf")
1139
confver = base.attribute("version");
1140
if(confver != "1.0")
1143
readEntry(base, "progver", &progver);
1145
readRectEntry(base, "geom", &mwgeom);
1146
xmlToStringList(base, "recentGCList", &recentGCList);
1147
xmlToStringList(base, "recentBrowseList", &recentBrowseList);
1148
readEntry(base, "lastStatusString", &lastStatusString);
1149
readBoolEntry(base, "useSound", &useSound);
1152
QDomElement accs = findSubTag(base, "accounts", &found);
1154
for(QDomNode n = accs.firstChild(); !n.isNull(); n = n.nextSibling()) {
1155
QDomElement a = n.toElement();
1159
if(a.tagName() == "account") {
1167
// convert old proxy config into new
1168
for(UserAccountList::Iterator it = acc.begin(); it != acc.end(); ++it) {
1169
UserAccount &a = *it;
1170
if(a.proxy_type > 0) {
1172
p.name = QObject::tr("%1 Proxy").arg(a.name);
1174
p.settings.host = a.proxy_host;
1175
p.settings.port = a.proxy_port;
1176
p.settings.useAuth = !a.proxy_user.isEmpty();
1177
p.settings.user = a.proxy_user;
1178
p.settings.pass = a.proxy_pass;
1179
proxyList.append(p);
1181
a.proxy_index = proxyList.count(); // 1 and up are proxies
1185
QDomElement prox = findSubTag(base, "proxies", &found);
1187
QDomNodeList list = prox.elementsByTagName("proxy");
1188
for(uint n = 0; n < list.count(); ++n) {
1189
QDomElement e = list.item(n).toElement();
1193
readEntry(e, "name", &p.name);
1194
readEntry(e, "type", &p.type);
1197
QDomElement pset = e.elementsByTagName("proxySettings").item(0).toElement();
1199
p.settings.fromXml(pset);
1200
proxyList.append(p);
1204
QDomElement p = findSubTag(base, "preferences", &found);
1208
QDomElement p_general = findSubTag(p, "general", &found);
1212
QDomElement p_roster = findSubTag(p_general, "roster", &found);
1214
readBoolEntry(p_roster, "useleft", &prefs.useleft);
1215
readBoolEntry(p_roster, "singleclick", &prefs.singleclick);
1216
readNumEntry(p_roster, "defaultAction", &prefs.defaultAction);
1217
readBoolEntry(p_roster, "useTransportIconsForContacts", &prefs.useTransportIconsForContacts);
1219
QDomElement sorting = findSubTag(p_roster, "sortStyle", &found);
1223
readEntry(sorting, "contact", &name);
1224
if ( name == "alpha" )
1225
prefs.rosterContactSortStyle = Options::ContactSortStyle_Alpha;
1227
prefs.rosterContactSortStyle = Options::ContactSortStyle_Status;
1229
readEntry(sorting, "group", &name);
1230
if ( name == "rank" )
1231
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Rank;
1233
prefs.rosterGroupSortStyle = Options::GroupSortStyle_Alpha;
1235
readEntry(sorting, "account", &name);
1236
if ( name == "rank" )
1237
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Rank;
1239
prefs.rosterAccountSortStyle = Options::AccountSortStyle_Alpha;
1244
//QDomElement avTag = findSubTag(p_general, "avatars", &found);
1246
// readBoolEntry(avTag, "use", &prefs.avatarsEnabled);
1247
// readBoolEntry(avTag, "use_chatdlg", &prefs.avatarsChatdlgEnabled);
1248
// readNumEntry(avTag, "size", &prefs.avatarsSize);
1251
QDomElement tag = findSubTag(p_general, "misc", &found);
1253
readNumEntry(tag, "delChats", &prefs.delChats);
1254
readBoolEntry(tag, "showJoins", &prefs.showJoins);
1255
readNumEntry(tag, "browser", &prefs.browser);
1256
readEntry(tag, "customBrowser", &prefs.customBrowser);
1257
readEntry(tag, "customMailer", &prefs.customMailer);
1258
readBoolEntry(tag, "alwaysOnTop", &prefs.alwaysOnTop);
1259
readBoolEntry(tag, "keepSizes", &prefs.keepSizes);
1260
readBoolEntry(tag, "ignoreHeadline", &prefs.ignoreHeadline);
1261
readBoolEntry(tag, "ignoreNonRoster", &prefs.ignoreNonRoster);
1262
readBoolEntry(tag, "excludeGroupChatIgnore", &prefs.excludeGroupChatsFromIgnore);
1263
readBoolEntry(tag, "scrollTo", &prefs.scrollTo);
1264
readBoolEntry(tag, "useEmoticons", &prefs.useEmoticons);
1265
readBoolEntry(tag, "alertOpenChats", &prefs.alertOpenChats);
1266
readBoolEntry(tag, "raiseChatWindow", &prefs.raiseChatWindow);
1267
readBoolEntry(tag, "showSubjects", &prefs.showSubjects);
1268
readBoolEntry(tag, "chatSoftReturn", &prefs.chatSoftReturn);
1269
readBoolEntry(tag, "showGroupCounts", &prefs.showGroupCounts);
1270
readBoolEntry(tag, "showCounter", &prefs.showCounter);
1271
readBoolEntry(tag, "chatSays", &prefs.chatSays);
1272
readBoolEntry(tag, "jidComplete", &prefs.jidComplete);
1273
readBoolEntry(tag, "grabUrls", &prefs.grabUrls);
1274
readBoolEntry(tag, "smallChats", &prefs.smallChats);
1275
readBoolEntry(tag, "messageEvents", &prefs.messageEvents);
1278
tag = findSubTag(p_general, "dock", &found);
1280
readBoolEntry(tag, "useDock", &prefs.useDock);
1281
readBoolEntry(tag, "dockDCstyle", &prefs.dockDCstyle);
1282
readBoolEntry(tag, "dockHideMW", &prefs.dockHideMW);
1283
readBoolEntry(tag, "dockToolMW", &prefs.dockToolMW);
1284
readBoolEntry(tag, "isWMDock", &prefs.isWMDock);
1287
/*tag = findSubTag(p_general, "security", &found);
1289
readEntry(tag, "pgp", &prefs.pgp);
1293
// Added by Kiko 020621: retrieves SSL cert chain validation configuration
1294
QDomElement p_ssl = findSubTag(p,"ssl",&found);
1296
readEntry(p_ssl, "trustedcertstoredir", &prefs.trustCertStoreDir);
1299
QDomElement p_events = findSubTag(p, "events", &found);
1303
readNumEntry(p_events, "alertstyle", &prefs.alertStyle);
1304
readBoolEntry(p_events, "autoAuth", &prefs.autoAuth);
1306
QDomElement tag = findSubTag(p_events, "receive", &found);
1308
readBoolEntry(tag, "popupMsgs", &prefs.popupMsgs);
1309
readBoolEntry(tag, "popupChats", &prefs.popupChats);
1310
readBoolEntry(tag, "popupHeadlines", &prefs.popupHeadlines);
1311
readBoolEntry(tag, "popupFiles", &prefs.popupFiles);
1312
readBoolEntry(tag, "noAwayPopup", &prefs.noAwayPopup);
1313
readBoolEntry(tag, "noUnlistedPopup", &prefs.noUnlistedPopup);
1314
readBoolEntry(tag, "raise", &prefs.raise);
1315
readNumEntry(tag, "incomingAs", &prefs.incomingAs);
1318
tag = findSubTag(p_events, "priority", &found);
1320
readNumEntry(tag, "message", &prefs.eventPriorityMessage);
1321
readNumEntry(tag, "chat", &prefs.eventPriorityChat);
1322
readNumEntry(tag, "headline", &prefs.eventPriorityHeadline);
1323
readNumEntry(tag, "auth", &prefs.eventPriorityAuth);
1324
readNumEntry(tag, "file", &prefs.eventPriorityFile);
1328
QDomElement p_pres = findSubTag(p, "presence", &found);
1332
QDomElement tag = findSubTag(p_pres, "misc", &found);
1334
readBoolEntry(tag, "askOnline", &prefs.askOnline);
1335
readBoolEntry(tag, "askOffline", &prefs.askOffline);
1336
readBoolEntry(tag, "rosterAnim", &prefs.rosterAnim);
1337
readBoolEntry(tag, "autoVersion", &prefs.autoVersion);
1338
readBoolEntry(tag, "autoVCardOnLogin", &prefs.autoVCardOnLogin);
1339
readBoolEntry(tag, "xmlConsoleOnLogin", &prefs.xmlConsoleOnLogin);
1342
tag = findSubTag(p_pres, "autostatus", &found);
1346
e = findSubTag(tag, "away", &found);
1348
if(e.hasAttribute("use"))
1349
readBoolAttribute(e, "use", &prefs.use_asAway);
1351
prefs.use_asAway = TRUE;
1353
e = findSubTag(tag, "xa", &found);
1355
if(e.hasAttribute("use"))
1356
readBoolAttribute(e, "use", &prefs.use_asXa);
1358
prefs.use_asXa = TRUE;
1360
e = findSubTag(tag, "offline", &found);
1362
if(e.hasAttribute("use"))
1363
readBoolAttribute(e, "use", &prefs.use_asOffline);
1365
prefs.use_asOffline = TRUE;
1368
readNumEntry(tag, "away", &prefs.asAway);
1369
readNumEntry(tag, "xa", &prefs.asXa);
1370
readNumEntry(tag, "offline", &prefs.asOffline);
1372
readEntry(tag, "message", &prefs.asMessage);
1375
tag = findSubTag(p_pres, "statuspresets", &found);
1377
prefs.sp.fromXml(tag);
1378
xmlToStringList(p_pres, "recentstatus", &prefs.recentStatus);
1381
QDomElement p_lnf = findSubTag(p, "lookandfeel", &found);
1385
readBoolEntry(p_lnf, "newHeadings", &prefs.clNewHeadings);
1387
QDomElement tag = findSubTag(p_lnf, "colors", &found);
1389
readColorEntry(tag, "online", &prefs.color[cOnline]);
1390
readColorEntry(tag, "listback", &prefs.color[cListBack]);
1391
readColorEntry(tag, "away", &prefs.color[cAway]);
1392
readColorEntry(tag, "dnd", &prefs.color[cDND]);
1393
readColorEntry(tag, "offline", &prefs.color[cOffline]);
1394
readColorEntry(tag, "groupfore", &prefs.color[cGroupFore]);
1395
readColorEntry(tag, "groupback", &prefs.color[cGroupBack]);
1396
readColorEntry(tag, "animfront", &prefs.color[cAnimFront]);
1397
readColorEntry(tag, "animback", &prefs.color[cAnimBack]);
1400
tag = findSubTag(p_lnf, "fonts", &found);
1402
readEntry(tag, "roster", &prefs.font[fRoster]);
1403
readEntry(tag, "message", &prefs.font[fMessage]);
1404
readEntry(tag, "chat", &prefs.font[fChat]);
1405
readEntry(tag, "popup", &prefs.font[fPopup]);
1409
QDomElement p_sound = findSubTag(p, "sound", &found);
1413
readEntry(p_sound, "player", &prefs.player);
1414
readBoolEntry(p_sound, "noawaysound", &prefs.noAwaySound);
1415
readBoolEntry(p_sound, "noGCSound", &prefs.noGCSound);
1417
QDomElement tag = findSubTag(p_sound, "onevent", &found);
1419
readEntry(tag, "message", &prefs.onevent[eMessage]);
1420
readEntry(tag, "chat1", &prefs.onevent[eChat1]);
1421
readEntry(tag, "chat2", &prefs.onevent[eChat2]);
1422
readEntry(tag, "system", &prefs.onevent[eSystem]);
1423
readEntry(tag, "headline", &prefs.onevent[eHeadline]);
1424
readEntry(tag, "online", &prefs.onevent[eOnline]);
1425
readEntry(tag, "offline", &prefs.onevent[eOffline]);
1426
readEntry(tag, "send", &prefs.onevent[eSend]);
1427
readEntry(tag, "incoming_ft", &prefs.onevent[eIncomingFT]);
1428
readEntry(tag, "ft_complete", &prefs.onevent[eFTComplete]);
1432
QDomElement p_sizes = findSubTag(p, "sizes", &found);
1434
readSizeEntry(p_sizes, "eventdlg", &prefs.sizeEventDlg);
1435
readSizeEntry(p_sizes, "chatdlg", &prefs.sizeChatDlg);
1439
QDomElement p_toolbars = findSubTag(p, "toolbars", &found);
1441
QStringList goodTags;
1442
goodTags << "toolbar";
1443
goodTags << "mainWin";
1445
bool mainWinCleared = false;
1446
bool oldStyle = true;
1448
for(QDomNode n = p_toolbars.firstChild(); !n.isNull(); n = n.nextSibling()) {
1449
QDomElement e = n.toElement();
1454
bool isGood = false;
1455
QStringList::Iterator it = goodTags.begin();
1456
for ( ; it != goodTags.end(); ++it ) {
1457
if ( e.tagName().left( (*it).length() ) == *it ) {
1460
if ( e.tagName().left(7) == "toolbar" )
1461
tbGroup = "mainWin";
1472
if ( tbGroup != "mainWin" || !mainWinCleared ) {
1473
prefs.toolbars[tbGroup].clear();
1474
if ( tbGroup == "mainWin" )
1475
mainWinCleared = true;
1479
Options::ToolbarPrefs tb = loadToolbarData( e );
1480
prefs.toolbars[tbGroup].append(tb);
1483
for(QDomNode nn = e.firstChild(); !nn.isNull(); nn = nn.nextSibling()) {
1484
QDomElement ee = nn.toElement();
1488
if ( ee.tagName() == "toolbar" ) {
1489
Options::ToolbarPrefs tb = loadToolbarData( ee );
1490
prefs.toolbars[tbGroup].append(tb);
1497
// event notifier in these versions was not implemented as an action, so add it
1498
if ( progver == "0.9" || progver == "0.9-CVS" ) {
1499
// at first, we need to scan the options, to determine, whether event_notifier already available
1501
QValueList<Options::ToolbarPrefs>::Iterator it = prefs.toolbars["mainWin"].begin();
1502
for ( ; it != prefs.toolbars["mainWin"].end(); ++it) {
1503
QStringList::Iterator it2 = (*it).keys.begin();
1504
for ( ; it2 != (*it).keys.end(); ++it2) {
1505
if ( *it2 == "event_notifier" ) {
1513
Options::ToolbarPrefs tb;
1514
tb.name = QObject::tr("Event notifier");
1517
tb.stretchable = true;
1518
tb.keys << "event_notifier";
1519
tb.dock = Qt::DockBottom;
1521
prefs.toolbars["mainWin"].append(tb);
1527
QDomElement p_groupchat = findSubTag(p, "groupchat", &found);
1529
readBoolEntry(p_groupchat, "nickcoloring", &prefs.gcNickColoring);
1530
readBoolEntry(p_groupchat, "highlighting", &prefs.gcHighlighting);
1531
xmlToStringList(p_groupchat, "highlightwords", &prefs.gcHighlights);
1532
xmlToStringList(p_groupchat, "nickcolors", &prefs.gcNickColors);
1535
QDomElement p_popup = findSubTag(p, "popups", &found);
1537
readBoolEntry(p_popup, "on", &prefs.ppIsOn);
1538
readBoolEntry(p_popup, "online", &prefs.ppOnline);
1539
readBoolEntry(p_popup, "offline", &prefs.ppOffline);
1540
readBoolEntry(p_popup, "statusChange", &prefs.ppStatus);
1541
readBoolEntry(p_popup, "message", &prefs.ppMessage);
1542
readBoolEntry(p_popup, "chat", &prefs.ppChat);
1543
readBoolEntry(p_popup, "headline", &prefs.ppHeadline);
1544
readBoolEntry(p_popup, "file", &prefs.ppFile);
1545
readNumEntry(p_popup, "jidClip", &prefs.ppJidClip);
1546
readNumEntry(p_popup, "statusClip", &prefs.ppStatusClip);
1547
readNumEntry(p_popup, "textClip", &prefs.ppTextClip);
1548
readNumEntry(p_popup, "hideTime", &prefs.ppHideTime);
1549
readColorEntry(p_popup, "borderColor", &prefs.ppBorderColor);
1552
QDomElement p_lockdown = findSubTag(p, "lockdown", &found);
1554
readBoolEntry(p_lockdown, "roster", &prefs.lockdown.roster);
1555
readBoolEntry(p_lockdown, "options", &prefs.lockdown.options);
1556
readBoolEntry(p_lockdown, "profiles", &prefs.lockdown.profiles);
1557
readBoolEntry(p_lockdown, "services", &prefs.lockdown.services);
1558
readBoolEntry(p_lockdown, "accounts", &prefs.lockdown.accounts);
1561
QDomElement p_iconset = findSubTag(p, "iconset", &found);
1563
readEntry(p_iconset, "system", &prefs.systemIconset);
1565
QDomElement roster = findSubTag(p_iconset, "roster", &found);
1567
readEntry(roster, "default", &prefs.defaultRosterIconset);
1569
QDomElement service = findSubTag(roster, "service", &found);
1571
prefs.serviceRosterIconset.clear();
1572
for (QDomNode n = service.firstChild(); !n.isNull(); n = n.nextSibling()) {
1573
QDomElement i = n.toElement();
1577
prefs.serviceRosterIconset[i.attribute("service")] = i.attribute("iconset");
1581
QDomElement custom = findSubTag(roster, "custom", &found);
1583
prefs.customRosterIconset.clear();
1584
for (QDomNode n = custom.firstChild(); !n.isNull(); n = n.nextSibling()) {
1585
QDomElement i = n.toElement();
1589
prefs.customRosterIconset[i.attribute("regExp")] = i.attribute("iconset");
1594
QDomElement emoticons = findSubTag(p_iconset, "emoticons", &found);
1596
prefs.emoticons.clear();
1597
for (QDomNode n = emoticons.firstChild(); !n.isNull(); n = n.nextSibling()) {
1598
QDomElement i = n.toElement();
1602
if ( i.tagName() == "item" ) {
1603
QString is = i.text();
1604
prefs.emoticons << is;
1610
QDomElement p_tip = findSubTag(p, "tipOfTheDay", &found);
1612
readBoolEntry(p_tip, "show", &prefs.showTips);
1613
readNumEntry(p_tip, "num", &prefs.tipNum);
1616
QDomElement p_disco = findSubTag(p, "disco", &found);
1618
readBoolEntry(p_disco, "items", &prefs.discoItems);
1619
readBoolEntry(p_disco, "info", &prefs.discoInfo);
1622
QDomElement p_dt = findSubTag(p, "dt", &found);
1624
readNumEntry(p_dt, "port", &prefs.dtPort);
1625
readEntry(p_dt, "external", &prefs.dtExternal);
1633
QString pathToProfile(const QString &name)
1635
return g.pathProfiles + "/" + name;
1638
QString pathToProfileConfig(const QString &name)
1640
return pathToProfile(name) + "/config.xml";
1643
QStringList getProfilesList()
1647
QDir d(g.pathProfiles);
1651
QStringList entries = d.entryList();
1652
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
1653
if(*it == "." || *it == "..")
1655
QFileInfo info(d, *it);
1667
bool profileExists(const QString &_name)
1669
QString name = _name.lower();
1671
QStringList list = getProfilesList();
1672
for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
1673
if((*it).lower() == name)
1679
bool profileNew(const QString &name)
1684
// verify the string is sane
1685
for(int n = 0; n < (int)name.length(); ++n) {
1686
if(!name.at(n).isLetterOrNumber())
1691
QDir d(g.pathProfiles);
1694
QDir p(g.pathProfiles + "/" + name);
1707
bool profileRename(const QString &oldname, const QString &name)
1709
// verify the string is sane
1710
for(int n = 0; n < (int)name.length(); ++n) {
1711
if(!name.at(n).isLetterOrNumber())
1715
// locate the folder
1716
QDir d(g.pathProfiles);
1719
if(!d.rename(oldname, name))
1725
static bool folderRemove(const QDir &_d)
1729
QStringList entries = d.entryList();
1730
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
1731
if(*it == "." || *it == "..")
1733
QFileInfo info(d, *it);
1735
if(!folderRemove(QDir(info.filePath())))
1739
//printf("deleting [%s]\n", info.filePath().latin1());
1740
d.remove(info.fileName());
1743
QString name = d.dirName();
1746
//printf("removing folder [%s]\n", d.filePath(name).latin1());
1752
bool profileDelete(const QString &path)
1758
return folderRemove(QDir(path));