diff --git a/src/core/ksambashare.cpp b/src/core/ksambashare.cpp --- a/src/core/ksambashare.cpp +++ b/src/core/ksambashare.cpp @@ -63,7 +63,7 @@ { setUserSharePath(); findSmbConf(); - sync(); + data = parse(getNetUserShareInfo()); } KSambaSharePrivate::~KSambaSharePrivate() @@ -365,7 +365,7 @@ return (result == 0) ? KSambaShareData::UserShareOk : KSambaShareData::UserShareSystemError; } -bool KSambaSharePrivate::sync() +QMap KSambaSharePrivate::parse(const QByteArray &usershareData) { const QRegExp headerRx(QString::fromLatin1("^\\s*\\[" "([^%<>*\?|/\\+=;:\",]+)" @@ -375,26 +375,25 @@ "=" "(.*)$")); - QTextStream stream(getNetUserShareInfo()); + QTextStream stream(usershareData); QString currentShare; - QStringList shareList; + QMap shares; while (!stream.atEnd()) { const QString line = stream.readLine().trimmed(); if (headerRx.exactMatch(line)) { currentShare = headerRx.cap(1).trimmed(); - shareList << currentShare; - if (!data.contains(currentShare)) { + if (!shares.contains(currentShare)) { KSambaShareData shareData; shareData.dd->name = currentShare; - data.insert(currentShare, shareData); + shares.insert(currentShare, shareData); } } else if (OptValRx.exactMatch(line)) { const QString key = OptValRx.cap(1).trimmed(); const QString value = OptValRx.cap(2).trimmed(); - KSambaShareData shareData = getShareByName(currentShare); + KSambaShareData shareData = shares[currentShare]; if (key == QLatin1String("path")) { // Samba accepts paths with and w/o trailing slash, we @@ -417,27 +416,19 @@ } else if (line.trimmed().isEmpty()) { continue; } else { - return false; + return shares; } } - QMutableMapIterator i(data); - while (i.hasNext()) { - i.next(); - if (!shareList.contains(i.key())) { - i.remove(); - } - } - - return true; + return shares; } void KSambaSharePrivate::_k_slotFileChange(const QString &path) { if (path != userSharePath) { return; } - sync(); + data = parse(getNetUserShareInfo()); //qDebug() << "path changed:" << path; Q_Q(KSambaShare); emit q->changed(); diff --git a/src/core/ksambashare_p.h b/src/core/ksambashare_p.h --- a/src/core/ksambashare_p.h +++ b/src/core/ksambashare_p.h @@ -58,7 +58,7 @@ KSambaShareData::UserShareError add(const KSambaShareData &shareData); KSambaShareData::UserShareError remove(const KSambaShareData &shareName) const; - bool sync(); + static QMap parse(const QByteArray &usershareData); void _k_slotFileChange(const QString &path);