summaryrefslogtreecommitdiffstats
path: root/src/libs/kdtools
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/kdtools')
-rw-r--r--src/libs/kdtools/kdgenericfactory.h29
-rw-r--r--src/libs/kdtools/kdsavefile.cpp2
-rw-r--r--src/libs/kdtools/kdsavefile.h2
-rw-r--r--src/libs/kdtools/kdupdaterfiledownloader.cpp16
-rw-r--r--src/libs/kdtools/kdupdaterupdatefinder.cpp2
-rw-r--r--src/libs/kdtools/kdupdaterupdateoperation.cpp34
-rw-r--r--src/libs/kdtools/kdupdaterupdateoperation.h1
7 files changed, 74 insertions, 12 deletions
diff --git a/src/libs/kdtools/kdgenericfactory.h b/src/libs/kdtools/kdgenericfactory.h
index 349c5ee92..4108c16fd 100644
--- a/src/libs/kdtools/kdgenericfactory.h
+++ b/src/libs/kdtools/kdgenericfactory.h
@@ -46,13 +46,14 @@
#include <QtCore/QHash>
-template <typename T_Product, typename T_Identifier = QString>
+template <typename T_Product, typename T_Identifier = QString, typename T_Argument = QString>
class KDGenericFactory
{
public:
virtual ~KDGenericFactory() {}
typedef T_Product *(*FactoryFunction)();
+ typedef T_Product *(*FactoryFunctionWithArg)(const T_Argument &arg);
template <typename T>
void registerProduct(const T_Identifier &name)
@@ -73,6 +74,25 @@ public:
return (*it)();
}
+ template <typename T>
+ void registerProductWithArg(const T_Identifier &name)
+ {
+#ifdef Q_CC_MSVC
+ FactoryFunctionWithArg function = &KDGenericFactory::create<T>;
+#else // compile fix for old gcc
+ FactoryFunctionWithArg function = &create<T>;
+#endif
+ map2.insert(name, function);
+ }
+
+ T_Product *createWithArg(const T_Identifier &name, const T_Argument &arg) const
+ {
+ const typename QHash<T_Identifier, FactoryFunctionWithArg>::const_iterator it = map2.find(name);
+ if (it == map2.end())
+ return 0;
+ return (*it)(arg);
+ }
+
private:
template <typename T>
static T_Product *create()
@@ -80,7 +100,14 @@ private:
return new T;
}
+ template <typename T>
+ static T_Product *create(const T_Argument &arg)
+ {
+ return new T(arg);
+ }
+
QHash<T_Identifier, FactoryFunction> map;
+ QHash<T_Identifier, FactoryFunctionWithArg> map2;
};
#endif
diff --git a/src/libs/kdtools/kdsavefile.cpp b/src/libs/kdtools/kdsavefile.cpp
index 483f1b338..88b95f42e 100644
--- a/src/libs/kdtools/kdsavefile.cpp
+++ b/src/libs/kdtools/kdsavefile.cpp
@@ -299,7 +299,7 @@ bool KDSaveFile::open(OpenMode mode)
return opened;
}
-bool KDSaveFile::atEnd()
+bool KDSaveFile::atEnd() const
{
return d->tmpFile ? d->tmpFile->atEnd() : QIODevice::atEnd();
}
diff --git a/src/libs/kdtools/kdsavefile.h b/src/libs/kdtools/kdsavefile.h
index 24eee9870..7408892d0 100644
--- a/src/libs/kdtools/kdsavefile.h
+++ b/src/libs/kdtools/kdsavefile.h
@@ -76,7 +76,7 @@ public:
bool resize(qint64 size);
int handle() const;
- bool atEnd();
+ bool atEnd() const;
qint64 bytesAvailable() const;
qint64 bytesToWrite() const;
bool canReadLine() const;
diff --git a/src/libs/kdtools/kdupdaterfiledownloader.cpp b/src/libs/kdtools/kdupdaterfiledownloader.cpp
index a7fbfe85b..95b574b2f 100644
--- a/src/libs/kdtools/kdupdaterfiledownloader.cpp
+++ b/src/libs/kdtools/kdupdaterfiledownloader.cpp
@@ -320,13 +320,13 @@ void KDUpdater::FileDownloader::emitDownloadStatus()
if (bytesReceived.endsWith(tmp))
bytesReceived.chop(tmp.length());
- status = bytesReceived + tr(" of ") + bytesToReceive;
+ status = tr("%1 of %2").arg(bytesReceived).arg(bytesToReceive);
} else {
if (d->m_bytesReceived > 0)
- status = humanReadableSize(d->m_bytesReceived) + tr(" downloaded.");
+ status = tr("%1 downloaded.").arg(humanReadableSize(d->m_bytesReceived));
}
- status += QLatin1String(" (") + humanReadableSize(d->m_downloadSpeed) + tr("/sec") + QLatin1Char(')');
+ status += QLatin1Char(' ') + tr("(%1/sec)").arg(humanReadableSize(d->m_downloadSpeed));
if (d->m_bytesToReceive > 0 && d->m_downloadSpeed > 0) {
const qint64 time = (d->m_bytesToReceive - d->m_bytesReceived) / d->m_downloadSpeed;
@@ -337,22 +337,22 @@ void KDUpdater::FileDownloader::emitDownloadStatus()
QString days;
if (d > 0)
- days = QString::number(d) + (d < 2 ? tr(" day") : tr(" days")) + QLatin1String(", ");
+ days = tr("%n day(s), ", "", d);
QString hours;
if (h > 0)
- hours = QString::number(h) + (h < 2 ? tr(" hour") : tr(" hours")) + QLatin1String(", ");
+ hours = tr("%n hour(s), ", "", h);
QString minutes;
if (m > 0)
- minutes = QString::number(m) + (m < 2 ? tr(" minute") : tr(" minutes"));
+ minutes = tr("%n minute(s)", "", m);
QString seconds;
if (s >= 0 && minutes.isEmpty()) {
s = (s <= 0 ? 1 : s);
- seconds = QString::number(s) + (s < 2 ? tr(" second") : tr(" seconds"));
+ seconds = tr("%n second(s)", "", s);
}
- status += tr(" - ") + days + hours + minutes + seconds + tr(" remaining.");
+ status += tr(" - %1%2%3%4 remaining.").arg(days).arg(hours).arg(minutes).arg(seconds);
} else {
status += tr(" - unknown time remaining.");
}
diff --git a/src/libs/kdtools/kdupdaterupdatefinder.cpp b/src/libs/kdtools/kdupdaterupdatefinder.cpp
index f37fa9244..e53c47280 100644
--- a/src/libs/kdtools/kdupdaterupdatefinder.cpp
+++ b/src/libs/kdtools/kdupdaterupdatefinder.cpp
@@ -227,7 +227,7 @@ void UpdateFinder::Private::computeUpdates()
}
// All done
- q->reportProgress(100, tr("%1 updates found.").arg(updates.count()));
+ q->reportProgress(100, tr("%n update(s) found.", "", updates.count()));
q->reportDone();
}
diff --git a/src/libs/kdtools/kdupdaterupdateoperation.cpp b/src/libs/kdtools/kdupdaterupdateoperation.cpp
index c1591f467..9ba165d4b 100644
--- a/src/libs/kdtools/kdupdaterupdateoperation.cpp
+++ b/src/libs/kdtools/kdupdaterupdateoperation.cpp
@@ -176,6 +176,40 @@ QStringList UpdateOperation::arguments() const
return m_arguments;
}
+struct StartsWith
+{
+ StartsWith(const QString &searchTerm)
+ : m_searchTerm(searchTerm) {}
+
+ bool operator()(const QString &searchString)
+ {
+ return searchString.startsWith(m_searchTerm);
+ }
+
+ QString m_searchTerm;
+};
+
+
+QString UpdateOperation::argumentKeyValue(const QString &key, const QString &defaultValue) const
+{
+ const QString keySeparater(key + QLatin1String("="));
+ const QStringList tArguments(arguments());
+ QStringList::const_iterator it = std::find_if(tArguments.begin(), tArguments.end(),
+ StartsWith(keySeparater));
+ if (it == tArguments.end())
+ return defaultValue;
+
+ const QString value = it->mid(keySeparater.size());
+
+ it = std::find_if(++it, tArguments.end(), StartsWith(keySeparater));
+ if (it != tArguments.end()) {
+ qWarning() << QString::fromLatin1("There are multiple keys in the arguments calling"
+ " '%1'. Only the first found '%2' is used: '%3'").arg(name(), key, arguments().join(
+ QLatin1String("; ")));
+ }
+ return value;
+}
+
/*!
Returns error details in case performOperation() failed.
*/
diff --git a/src/libs/kdtools/kdupdaterupdateoperation.h b/src/libs/kdtools/kdupdaterupdateoperation.h
index cac68d2f1..21b7b64a3 100644
--- a/src/libs/kdtools/kdupdaterupdateoperation.h
+++ b/src/libs/kdtools/kdupdaterupdateoperation.h
@@ -75,6 +75,7 @@ public:
void setArguments(const QStringList &args);
QStringList arguments() const;
+ QString argumentKeyValue(const QString & key, const QString &defaultValue = QString()) const;
void clear();
QString errorString() const;
int error() const;