diff options
Diffstat (limited to 'src/libs/kdtools')
-rw-r--r-- | src/libs/kdtools/kdgenericfactory.h | 29 | ||||
-rw-r--r-- | src/libs/kdtools/kdsavefile.cpp | 2 | ||||
-rw-r--r-- | src/libs/kdtools/kdsavefile.h | 2 | ||||
-rw-r--r-- | src/libs/kdtools/kdupdaterfiledownloader.cpp | 16 | ||||
-rw-r--r-- | src/libs/kdtools/kdupdaterupdatefinder.cpp | 2 | ||||
-rw-r--r-- | src/libs/kdtools/kdupdaterupdateoperation.cpp | 34 | ||||
-rw-r--r-- | src/libs/kdtools/kdupdaterupdateoperation.h | 1 |
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; |