1
/****************************************************************************
2
** profiles.cpp - deal with profiles
3
** Copyright (C) 2001, 2002 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 program; if not, write to the Free Software
17
** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,USA.
19
****************************************************************************/
27
#include<qapplication.h>
32
static QDomElement textTag(QDomDocument &doc, const QString &name, const QString &content)
34
QDomElement tag = doc.createElement(name);
35
QDomText text = doc.createTextNode(content);
36
tag.appendChild(text);
41
static QDomElement textTag(QDomDocument &doc, const QString &name, int content)
43
QDomElement tag = doc.createElement(name);
44
QDomText text = doc.createTextNode(QString::number(content));
45
tag.appendChild(text);
50
static QDomElement textTag(QDomDocument &doc, const QString &name, bool content)
52
QDomElement tag = doc.createElement(name);
53
QDomText text = doc.createTextNode(content ? "true" : "false");
54
tag.appendChild(text);
59
static QDomElement textTag(QDomDocument &doc, const QString &name, QSize s)
62
str.sprintf("%d,%d", s.width(), s.height());
64
QDomElement tag = doc.createElement(name);
65
QDomText text = doc.createTextNode(str);
66
tag.appendChild(text);
71
static QDomElement textTag(QDomDocument &doc, const QString &name, QRect r)
74
str.sprintf("%d,%d,%d,%d", r.x(), r.y(), r.width(), r.height());
76
QDomElement tag = doc.createElement(name);
77
QDomText text = doc.createTextNode(str);
78
tag.appendChild(text);
83
static QString tagContent(const QDomElement &e)
85
// look for some tag content
86
for(QDomNode n = e.firstChild(); !n.isNull(); n = n.nextSibling()) {
87
QDomText i = n.toText();
96
static QDomElement findSubTag(const QDomElement &e, const QString &name, bool *found)
101
for(QDomNode n = e.firstChild(); !n.isNull(); n = n.nextSibling()) {
102
QDomElement i = n.toElement();
105
if(i.tagName() == name) {
116
static void readEntry(const QDomElement &e, const QString &name, QString *v)
119
QDomElement tag = findSubTag(e, name, &found);
122
*v = tagContent(tag);
125
static void readNumEntry(const QDomElement &e, const QString &name, int *v)
128
QDomElement tag = findSubTag(e, name, &found);
131
*v = tagContent(tag).toInt();
134
static void readBoolEntry(const QDomElement &e, const QString &name, bool *v)
137
QDomElement tag = findSubTag(e, name, &found);
140
*v = (tagContent(tag) == "true") ? TRUE: FALSE;
143
static void readSizeEntry(const QDomElement &e, const QString &name, QSize *v)
146
QDomElement tag = findSubTag(e, name, &found);
149
QStringList list = QStringList::split(',', tagContent(tag));
150
if(list.count() != 2)
153
s.setWidth(list[0].toInt());
154
s.setHeight(list[1].toInt());
158
static void readRectEntry(const QDomElement &e, const QString &name, QRect *v)
161
QDomElement tag = findSubTag(e, name, &found);
164
QStringList list = QStringList::split(',', tagContent(tag));
165
if(list.count() != 4)
168
r.setX(list[0].toInt());
169
r.setY(list[1].toInt());
170
r.setWidth(list[2].toInt());
171
r.setHeight(list[3].toInt());
175
static void readColorEntry(const QDomElement &e, const QString &name, QColor *v)
178
QDomElement tag = findSubTag(e, name, &found);
182
c.setNamedColor(tagContent(tag));
187
static void setBoolAttribute(QDomElement e, const QString &name, bool b)
189
e.setAttribute(name, b ? "true" : "false");
192
static void readBoolAttribute(QDomElement e, const QString &name, bool *v)
194
if(e.hasAttribute(name)) {
195
QString s = e.attribute(name);
196
*v = (s == "true") ? TRUE: FALSE;
201
UserAccount::UserAccount()
206
void UserAccount::reset()
222
opt_keepAlive = TRUE;
230
QString UserAccount::jid() const
232
return QString("%1@%2").arg(user).arg(host);
235
// FIXME: this should be a const function (as should other ::toXml functions)
236
QDomElement UserAccount::toXml(QDomDocument &doc, const QString &tagName)
238
QDomElement a = doc.createElement(tagName);
240
setBoolAttribute(a, "auto", opt_auto);
241
setBoolAttribute(a, "ssl", opt_ssl);
242
setBoolAttribute(a, "showOffline", tog_offline);
243
setBoolAttribute(a, "showAway", tog_away);
244
setBoolAttribute(a, "showAgents", tog_agents);
245
setBoolAttribute(a, "keepAlive", opt_keepAlive);
246
setBoolAttribute(a, "plain", opt_plain);
247
setBoolAttribute(a, "log", opt_log);
248
setBoolAttribute(a, "reconn", opt_reconn);
250
a.appendChild(textTag(doc, "name", name));
251
a.appendChild(textTag(doc, "username", user));
253
a.appendChild(textTag(doc, "password", encodePassword(pass, jid()) ));
254
a.appendChild(textTag(doc, "host", host));
255
a.appendChild(textTag(doc, "port", QString::number(port)));
256
a.appendChild(textTag(doc, "resource", resource));
257
a.appendChild(textTag(doc, "priority", QString::number(priority)));
258
a.appendChild(textTag(doc, "OLR", olr_string));
260
QDomElement r = doc.createElement("roster");
262
for(JabRosterEntry *i = roster.first(); i; i = roster.next()) {
263
QDomElement tag = doc.createElement("item");
264
tag.setAttribute("jid", i->jid);
265
tag.setAttribute("name", i->nick);
266
tag.setAttribute("subscription", i->sub);
267
for(QStringList::ConstIterator it = i->groups.begin(); it != i->groups.end(); ++it)
268
tag.appendChild(textTag(doc, "group", *it));
275
void UserAccount::fromXml(const QDomElement &a)
279
readEntry(a, "name", &name);
280
readBoolAttribute(a, "auto", &opt_auto);
281
readBoolAttribute(a, "ssl", &opt_ssl);
282
readBoolAttribute(a, "showOffline", &tog_offline);
283
readBoolAttribute(a, "showAway", &tog_away);
284
readBoolAttribute(a, "showAgents", &tog_agents);
285
readBoolAttribute(a, "keepAlive", &opt_keepAlive);
286
readBoolAttribute(a, "plain", &opt_plain);
287
readBoolAttribute(a, "log", &opt_log);
288
readBoolAttribute(a, "reconn", &opt_reconn);
290
readEntry(a, "username", &user);
291
readEntry(a, "host", &host);
292
readEntry(a, "password", &pass);
296
pass = decodePassword(pass, jid());
299
readNumEntry(a, "port", &port);
300
readEntry(a, "resource", &resource);
301
readNumEntry(a, "priority", &priority);
302
readEntry(a, "OLR", &olr_string);
305
QDomElement r = findSubTag(a, "roster", &found);
307
for(QDomNode n = r.firstChild(); !n.isNull(); n = n.nextSibling()) {
308
QDomElement i = n.toElement();
312
if(i.tagName() == "item") {
313
JabRosterEntry *entry = new JabRosterEntry;
315
entry->jid = i.attribute("jid");
316
entry->sub = i.attribute("subscription");
317
entry->nick = i.attribute("name");
320
for(QDomNode n = i.firstChild(); !n.isNull(); n = n.nextSibling()) {
321
QDomElement tag = n.toElement();
325
if(tag.tagName() == "group")
326
entry->groups.append(tagContent(tag));
334
UserProfile::UserProfile()
339
void UserProfile::reset()
342
nix = win = mac = FALSE;
354
progver = PROG_VERSION;
357
mwgeom.setRect(64, 64, 150, 360);
358
lastStatusString = "";
364
prefs.useleft = FALSE;
365
prefs.singleclick = FALSE;
366
prefs.defaultAction = 0;
367
prefs.delChats = dcHour;
369
prefs.customBrowser = "";
370
prefs.customMailer = "";
371
prefs.alwaysOnTop = win ? TRUE : FALSE;
372
prefs.keepSizes = FALSE;
373
prefs.ignoreHeadline = FALSE;
374
prefs.useDock = win ? TRUE: FALSE;
375
prefs.dockDCstyle = win ? TRUE: FALSE;
376
prefs.alertStyle = 2;
377
prefs.popupMsgs = FALSE;
378
prefs.popupChats = FALSE;
380
prefs.incomingAs = 0;
381
prefs.outgoingAs = 0;
382
prefs.askOnline = FALSE;
383
prefs.rosterAnim = TRUE;
387
prefs.scrollTo = TRUE;
390
prefs.sp.set(QObject::tr("Away from desk"), QObject::tr("I am away from my desk. Leave a message."));
391
prefs.sp.set(QObject::tr("Showering"), QObject::tr("I'm in the shower. You'll have to wait for me to get out."));
392
prefs.sp.set(QObject::tr("Eating"), QObject::tr("Out eating. Mmmm.. food."));
393
prefs.sp.set(QObject::tr("Sleep"), QObject::tr("Sleep is good. Zzzzz"));
394
prefs.sp.set(QObject::tr("Work"), QObject::tr("Can't chat. Gotta work."));
395
prefs.sp.set(QObject::tr("Air"), QObject::tr("Stepping out to get some fresh air."));
396
prefs.sp.set(QObject::tr("Movie"), QObject::tr("Out to a movie. Is that OK with you?"));
397
prefs.sp.set(QObject::tr("Secret"), QObject::tr("I'm not available right now and that's all you need to know."));
398
prefs.sp.set(QObject::tr("Out for the night"), QObject::tr("Out for the night."));
399
prefs.sp.set(QObject::tr("Greece"), QObject::tr("I have gone to a far away place. I will be back someday!"));
401
prefs.iconset = "stellar";
403
prefs.color[cOnline] = QColor("#0060C0");
404
prefs.color[cListBack] = QColor("#C0C0C0");
405
prefs.color[cAway] = QColor("#008080");
406
prefs.color[cDND] = QColor("#800000");
407
prefs.color[cOffline] = QColor("#000000");
408
prefs.color[cGroupFore] = QColor("#000000");
409
prefs.color[cGroupBack] = QColor("#FFFFFF");
411
prefs.font[fRoster] = QApplication::font().toString();
412
prefs.font[fMessage] = QApplication::font().toString();
413
prefs.font[fChat] = QApplication::font().toString();
415
prefs.player = "play";
416
prefs.noAwaySound = FALSE;
418
prefs.onevent[eMessage] = g.pathBase + "/sound/chat2.wav";
419
prefs.onevent[eChat1] = g.pathBase + "/sound/chat1.wav";
420
prefs.onevent[eChat2] = g.pathBase + "/sound/chat2.wav";
421
prefs.onevent[eSystem] = g.pathBase + "/sound/chat2.wav";
422
prefs.onevent[eOnline] = g.pathBase + "/sound/online.wav";
423
prefs.onevent[eOffline] = g.pathBase + "/sound/offline.wav";
424
prefs.onevent[eSend] = g.pathBase + "/sound/send.wav";
426
prefs.sizeEventDlg = EventDlg::defaultSize();
427
prefs.sizeChatDlg = ChatDlg::defaultSize();
430
bool UserProfile::toFile(const QString &fname)
432
// FILE *f = fopen("c:\\psi.txt", "w");
433
// fprintf(f, "would have opened [%s]\n", fname.latin1());
439
QDomElement base = doc.createElement("psiconf");
440
base.setAttribute("version", "1.0");
441
doc.appendChild(base);
443
base.appendChild(textTag(doc, "progver", PROG_VERSION));
444
base.appendChild(textTag(doc, "geom", mwgeom));
445
base.appendChild(textTag(doc, "lastStatusString", lastStatusString));
446
base.appendChild(textTag(doc, "useSound", useSound));
448
QDomElement accs = doc.createElement("accounts");
449
base.appendChild(accs);
450
for(UserAccountList::Iterator ai = acc.begin(); ai != acc.end(); ++ai)
451
accs.appendChild((*ai).toXml(doc, "account"));
453
QDomElement p = doc.createElement("preferences");
457
QDomElement p_general = doc.createElement("general");
458
p.appendChild(p_general);
461
QDomElement p_roster = doc.createElement("roster");
462
p_general.appendChild(p_roster);
464
p_roster.appendChild(textTag(doc, "useleft", prefs.useleft));
465
p_roster.appendChild(textTag(doc, "singleclick", prefs.singleclick));
466
p_roster.appendChild(textTag(doc, "defaultAction", prefs.defaultAction));
469
QDomElement p_misc = doc.createElement("misc");
470
p_general.appendChild(p_misc);
472
p_misc.appendChild(textTag(doc, "delChats", prefs.delChats));
473
p_misc.appendChild(textTag(doc, "browser", prefs.browser));
474
p_misc.appendChild(textTag(doc, "customBrowser", prefs.customBrowser));
475
p_misc.appendChild(textTag(doc, "customMailer", prefs.customMailer));
476
p_misc.appendChild(textTag(doc, "alwaysOnTop", prefs.alwaysOnTop));
477
p_misc.appendChild(textTag(doc, "keepSizes", prefs.keepSizes));
478
p_misc.appendChild(textTag(doc, "ignoreHeadline", prefs.ignoreHeadline));
479
p_misc.appendChild(textTag(doc, "scrollTo", prefs.scrollTo));
482
QDomElement p_dock = doc.createElement("dock");
483
p_general.appendChild(p_dock);
485
p_dock.appendChild(textTag(doc, "useDock", prefs.useDock));
486
p_dock.appendChild(textTag(doc, "dockDCstyle", prefs.dockDCstyle));
491
QDomElement p_events = doc.createElement("events");
492
p.appendChild(p_events);
494
p_events.appendChild(textTag(doc, "alertstyle", prefs.alertStyle));
497
QDomElement p_receive = doc.createElement("receive");
498
p_events.appendChild(p_receive);
500
p_receive.appendChild(textTag(doc, "popupMsgs", prefs.popupMsgs));
501
p_receive.appendChild(textTag(doc, "popupChats", prefs.popupChats));
502
p_receive.appendChild(textTag(doc, "raise", prefs.raise));
503
p_receive.appendChild(textTag(doc, "incomingAs", prefs.incomingAs));
506
QDomElement p_send = doc.createElement("send");
507
p_events.appendChild(p_send);
509
p_send.appendChild(textTag(doc, "outgoingAs", prefs.outgoingAs));
514
QDomElement p_pres = doc.createElement("presence");
515
p.appendChild(p_pres);
518
QDomElement tag = doc.createElement("misc");
519
p_pres.appendChild(tag);
521
tag.appendChild(textTag(doc, "askOnline", prefs.askOnline));
522
tag.appendChild(textTag(doc, "rosterAnim", prefs.rosterAnim));
525
QDomElement tag = doc.createElement("autostatus");
526
p_pres.appendChild(tag);
528
tag.appendChild(textTag(doc, "away", prefs.asAway));
529
tag.appendChild(textTag(doc, "xa", prefs.asXa));
530
tag.appendChild(textTag(doc, "offline", prefs.asOffline));
533
p_pres.appendChild(prefs.sp.toXml(doc, "statuspresets"));
538
QDomElement p_lnf = doc.createElement("lookandfeel");
539
p.appendChild(p_lnf);
541
p_lnf.appendChild(textTag(doc, "iconset", prefs.iconset));
544
QDomElement tag = doc.createElement("colors");
545
p_lnf.appendChild(tag);
547
tag.appendChild(textTag(doc, "online", prefs.color[cOnline].name() ));
548
tag.appendChild(textTag(doc, "listback", prefs.color[cListBack].name() ));
549
tag.appendChild(textTag(doc, "away", prefs.color[cAway].name() ));
550
tag.appendChild(textTag(doc, "dnd", prefs.color[cDND].name() ));
551
tag.appendChild(textTag(doc, "offline", prefs.color[cOffline].name() ));
552
tag.appendChild(textTag(doc, "groupfore", prefs.color[cGroupFore].name() ));
553
tag.appendChild(textTag(doc, "groupback", prefs.color[cGroupBack].name() ));
557
QDomElement tag = doc.createElement("fonts");
558
p_lnf.appendChild(tag);
560
tag.appendChild(textTag(doc, "roster", prefs.font[fRoster] ));
561
tag.appendChild(textTag(doc, "message", prefs.font[fMessage] ));
562
tag.appendChild(textTag(doc, "chat", prefs.font[fChat] ));
567
QDomElement p_sound = doc.createElement("sound");
568
p.appendChild(p_sound);
570
p_sound.appendChild(textTag(doc, "player", prefs.player));
571
p_sound.appendChild(textTag(doc, "noawaysound", prefs.noAwaySound));
574
QDomElement p_onevent = doc.createElement("onevent");
575
p_sound.appendChild(p_onevent);
577
p_onevent.appendChild(textTag(doc, "message", prefs.onevent[eMessage]));
578
p_onevent.appendChild(textTag(doc, "chat1", prefs.onevent[eChat1]));
579
p_onevent.appendChild(textTag(doc, "chat2", prefs.onevent[eChat2]));
580
p_onevent.appendChild(textTag(doc, "system", prefs.onevent[eSystem]));
581
p_onevent.appendChild(textTag(doc, "online", prefs.onevent[eOnline]));
582
p_onevent.appendChild(textTag(doc, "offline", prefs.onevent[eOffline]));
583
p_onevent.appendChild(textTag(doc, "send", prefs.onevent[eSend]));
588
QDomElement p_sizes = doc.createElement("sizes");
589
p.appendChild(p_sizes);
591
p_sizes.appendChild(textTag(doc, "eventdlg", prefs.sizeEventDlg));
592
p_sizes.appendChild(textTag(doc, "chatdlg", prefs.sizeChatDlg));
596
if(!f.open(IO_WriteOnly))
600
t.setEncoding(QTextStream::UnicodeUTF8);
608
bool UserProfile::fromFile(const QString &fname)
614
if(!f.open(IO_ReadOnly))
616
if(!doc.setContent(&f))
620
QDomElement base = doc.documentElement();
621
if(base.tagName() != "psiconf")
623
confver = base.attribute("version");
627
readEntry(base, "progver", &progver);
629
readRectEntry(base, "geom", &mwgeom);
630
readEntry(base, "lastStatusString", &lastStatusString);
631
readBoolEntry(base, "usesound", &useSound);
634
QDomElement accs = findSubTag(base, "accounts", &found);
636
for(QDomNode n = accs.firstChild(); !n.isNull(); n = n.nextSibling()) {
637
QDomElement a = n.toElement();
641
if(a.tagName() == "account") {
649
QDomElement p = findSubTag(base, "preferences", &found);
653
QDomElement p_general = findSubTag(p, "general", &found);
657
QDomElement p_roster = findSubTag(p_general, "roster", &found);
659
readBoolEntry(p_roster, "useleft", &prefs.useleft);
660
readBoolEntry(p_roster, "singleclick", &prefs.singleclick);
661
readNumEntry(p_roster, "defaultAction", &prefs.defaultAction);
664
QDomElement tag = findSubTag(p_general, "misc", &found);
666
readNumEntry(tag, "delChats", &prefs.delChats);
667
readNumEntry(tag, "browser", &prefs.browser);
668
readEntry(tag, "customBrowser", &prefs.customBrowser);
669
readEntry(tag, "customMailer", &prefs.customMailer);
670
readBoolEntry(tag, "alwaysOnTop", &prefs.alwaysOnTop);
671
readBoolEntry(tag, "keepSizes", &prefs.keepSizes);
672
readBoolEntry(tag, "ignoreHeadline", &prefs.ignoreHeadline);
673
readBoolEntry(tag, "scrollTo", &prefs.scrollTo);
676
tag = findSubTag(p_general, "dock", &found);
678
readBoolEntry(tag, "useDock", &prefs.useDock);
679
readBoolEntry(tag, "dockDCstyle", &prefs.dockDCstyle);
683
QDomElement p_events = findSubTag(p, "events", &found);
687
readNumEntry(p_events, "alertstyle", &prefs.alertStyle);
689
QDomElement tag = findSubTag(p_events, "receive", &found);
691
readBoolEntry(tag, "popupMsgs", &prefs.popupMsgs);
692
readBoolEntry(tag, "popupChats", &prefs.popupChats);
693
readBoolEntry(tag, "raise", &prefs.raise);
694
readNumEntry(tag, "incomingAs", &prefs.incomingAs);
697
tag = findSubTag(p_events, "send", &found);
699
readNumEntry(tag, "outgoingAs", &prefs.outgoingAs);
703
QDomElement p_pres = findSubTag(p, "presence", &found);
707
QDomElement tag = findSubTag(p_pres, "misc", &found);
709
readBoolEntry(tag, "askOnline", &prefs.askOnline);
710
readBoolEntry(tag, "rosterAnim", &prefs.rosterAnim);
713
tag = findSubTag(p_pres, "autostatus", &found);
715
readNumEntry(tag, "away", &prefs.asAway);
716
readNumEntry(tag, "xa", &prefs.asXa);
717
readNumEntry(tag, "offline", &prefs.asOffline);
720
tag = findSubTag(p_pres, "statuspresets", &found);
722
prefs.sp.fromXml(tag);
725
QDomElement p_lnf = findSubTag(p, "lookandfeel", &found);
729
readEntry(p_lnf, "iconset", &prefs.iconset);
731
QDomElement tag = findSubTag(p_lnf, "colors", &found);
733
readColorEntry(tag, "online", &prefs.color[cOnline]);
734
readColorEntry(tag, "listback", &prefs.color[cListBack]);
735
readColorEntry(tag, "away", &prefs.color[cAway]);
736
readColorEntry(tag, "dnd", &prefs.color[cDND]);
737
readColorEntry(tag, "offline", &prefs.color[cOffline]);
738
readColorEntry(tag, "groupfore", &prefs.color[cGroupFore]);
739
readColorEntry(tag, "groupback", &prefs.color[cGroupBack]);
742
tag = findSubTag(p_lnf, "fonts", &found);
744
readEntry(tag, "roster", &prefs.font[fRoster]);
745
readEntry(tag, "message", &prefs.font[fMessage]);
746
readEntry(tag, "chat", &prefs.font[fChat]);
750
QDomElement p_sound = findSubTag(p, "sound", &found);
754
readEntry(p_sound, "player", &prefs.player);
755
readBoolEntry(p_sound, "noawaysound", &prefs.noAwaySound);
757
QDomElement tag = findSubTag(p_sound, "onevent", &found);
759
readEntry(tag, "message", &prefs.onevent[eMessage]);
760
readEntry(tag, "chat1", &prefs.onevent[eChat1]);
761
readEntry(tag, "chat2", &prefs.onevent[eChat2]);
762
readEntry(tag, "system", &prefs.onevent[eSystem]);
763
readEntry(tag, "online", &prefs.onevent[eOnline]);
764
readEntry(tag, "offline", &prefs.onevent[eOffline]);
765
readEntry(tag, "send", &prefs.onevent[eSend]);
769
QDomElement p_sizes = findSubTag(p, "sizes", &found);
771
readSizeEntry(p_sizes, "eventdlg", &prefs.sizeEventDlg);
772
readSizeEntry(p_sizes, "chatdlg", &prefs.sizeChatDlg);
780
QString pathToProfile(const QString &name)
782
return g.pathProfiles + "/" + name;
785
QString pathToProfileConfig(const QString &name)
787
return pathToProfile(name) + "/config.xml";
790
QStringList getProfilesList()
794
QDir d(g.pathProfiles);
798
QStringList entries = d.entryList();
799
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
800
if(*it == "." || *it == "..")
802
QFileInfo info(d, *it);
814
bool profileExists(const QString &_name)
816
QString name = _name.lower();
818
QStringList list = getProfilesList();
819
for(QStringList::ConstIterator it = list.begin(); it != list.end(); ++it) {
820
if((*it).lower() == name)
826
bool profileNew(const QString &name)
831
// verify the string is sane
832
for(int n = 0; n < (int)name.length(); ++n) {
833
if(!name.at(n).isLetterOrNumber())
838
QDir d(g.pathProfiles);
841
QDir p(g.pathProfiles + "/" + name);
854
bool profileRename(const QString &oldname, const QString &name)
856
// verify the string is sane
857
for(int n = 0; n < (int)name.length(); ++n) {
858
if(!name.at(n).isLetterOrNumber())
863
QDir d(g.pathProfiles);
866
if(!d.rename(oldname, name))
872
static bool folderRemove(const QDir &_d)
876
QStringList entries = d.entryList();
877
for(QStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
878
if(*it == "." || *it == "..")
880
QFileInfo info(d, *it);
882
if(!folderRemove(QDir(info.filePath())))
886
//printf("deleting [%s]\n", info.filePath().latin1());
887
d.remove(info.filePath());
890
QString name = d.dirName();
893
//printf("removing folder [%s]\n", d.filePath(name).latin1());
899
bool profileDelete(const QString &path)
905
return folderRemove(QDir(path));