From f8c12e029ff5ad7018dc098bd92429ecddae8dc1 Mon Sep 17 00:00:00 2001 From: Aleix Pol Date: Fri, 29 Jan 2016 15:59:56 +0100 Subject: [PATCH] Improve Qt5 usage Don't rely on QString(const char*) Prefer splitting with char than with a string. Leverage Q_GLOBAL_STATIC. --- qt/component.cpp | 78 ++++++++++++++++++++-------------------- qt/database.cpp | 20 +++++------ qt/provides.cpp | 2 +- qt/test/qtdbreadtest.cpp | 7 ++-- qt/test/testpaths.h.in | 2 +- 5 files changed, 54 insertions(+), 55 deletions(-) diff --git a/qt/component.cpp b/qt/component.cpp index a3d2fb3e..abb3b0aa 100644 --- a/qt/component.cpp +++ b/qt/component.cpp @@ -131,10 +131,12 @@ QString Component::icon() const { } QUrl Component::iconUrl(const QSize& size) const { - QString sizeStr = "64x64"; + QString sizeStr; // if no size was specified, we assume 64x64 if (size.isValid()) - sizeStr = QString("%1x%2").arg(size.width()).arg(size.height()); + sizeStr = QStringLiteral("%1x%2").arg(size.width()).arg(size.height()); + else + sizeStr = QStringLiteral("64x64"); return d->m_iconUrls.value(sizeStr); } @@ -187,10 +189,12 @@ void Component::setIcon(const QString& icon) { } void Component::addIconUrl(const QUrl& iconUrl, const QSize& size) { - QString sizeStr = "64x64"; + QString sizeStr; // if no size was specified, we assume 64x64 if (size.isValid()) - sizeStr = QString("%1x%2").arg(size.width()).arg(size.height()); + sizeStr = QStringLiteral("%1x%2").arg(size.width()).arg(size.height()); + else + sizeStr = QStringLiteral("64x64"); d->m_iconUrls.insert(sizeStr, iconUrl); } @@ -275,26 +279,23 @@ bool Component::operator==(const Component& other) { return false; } -Component::~Component() { +Component::~Component() = default; -} - -QHash buildKindMap() { - QHash map; - map.insert(Component::KindAddon, QLatin1String("addon")); - map.insert(Component::KindCodec, QLatin1String("codec")); - map.insert(Component::KindDesktop, QLatin1String("desktop")); - map.insert(Component::KindFont, QLatin1String("font")); - map.insert(Component::KindGeneric, QLatin1String("generic")); - map.insert(Component::KindInputmethod, QLatin1String("inputmethod")); - map.insert(Component::KindAddon, QLatin1String("firmware")); - map.insert(Component::KindUnknown, QLatin1String("unknown")); - return map; -} +typedef QHash KindMap; +Q_GLOBAL_STATIC_WITH_ARGS(KindMap, kindMap, ( { + { Component::KindAddon, QLatin1String("addon") }, + { Component::KindCodec, QLatin1String("codec") }, + { Component::KindDesktop, QLatin1String("desktop") }, + { Component::KindFont, QLatin1String("font") }, + { Component::KindGeneric, QLatin1String("generic") }, + { Component::KindInputmethod, QLatin1String("inputmethod") }, + { Component::KindAddon, QLatin1String("firmware") }, + { Component::KindUnknown, QLatin1String("unknown") } + } +)); QString Component::kindToString(Component::Kind kind) { - static QHash kindMap = buildKindMap(); - return kindMap.value(kind); + return kindMap->value(kind); } Component::Kind Component::stringToKind(const QString& kindString) { @@ -353,28 +354,29 @@ Component::UrlKind Component::stringToUrlKind(const QString& urlKindString) { return UrlKindUnknown; } -static QHash buildUrlKindMap() { - QHash map; - map.insert(Component::UrlKindBugtracker,QLatin1String("bugtracker")); - map.insert(Component::UrlKindDonation,QLatin1String("donation")); - map.insert(Component::UrlKindFaq,QLatin1String("faq")); - map.insert(Component::UrlKindHelp,QLatin1String("help")); - map.insert(Component::UrlKindHomepage, QLatin1String("homepage")); - map.insert(Component::UrlKindUnknown, QLatin1String("unknown")); - return map; -} +typedef QHash UrlKindMap; +Q_GLOBAL_STATIC_WITH_ARGS(UrlKindMap, urlKindMap, ({ + { Component::UrlKindBugtracker, QLatin1String("bugtracker") }, + { Component::UrlKindDonation, QLatin1String("donation") }, + { Component::UrlKindFaq, QLatin1String("faq") }, + { Component::UrlKindHelp, QLatin1String("help") }, + { Component::UrlKindHomepage, QLatin1String("homepage") }, + { Component::UrlKindUnknown, QLatin1String("unknown") }, + })); QString Component::urlKindToString(Component::UrlKind kind) { - static const QHash kindMap = buildUrlKindMap(); - return kindMap.value(kind); + return urlKindMap->value(kind); } QString Component::bundleKindToString(Component::BundleKind kind) { - if (kind == Component::BundleKindLimba) - QLatin1String("limba"); - if (kind == Component::BundleKindXdgApp) - QLatin1String("xdg-app"); - return QString(); + switch (kind) { + case Component::BundleKindLimba: + return QStringLiteral("limba"); + case Component::BundleKindXdgApp: + return QStringLiteral("xdg-app"); + default: + return QString(); + } } Component::BundleKind Component::stringToBundleKind(const QString& bundleKindString) { diff --git a/qt/database.cpp b/qt/database.cpp index 097cc658..0081e40b 100644 --- a/qt/database.cpp +++ b/qt/database.cpp @@ -115,7 +115,7 @@ Component xapianDocToComponent(Xapian::Document document) { component.setName(name); // Package name - QStringList packageNames = value(document,XapianValues::PKGNAMES).split(";",QString::SkipEmptyParts); + QStringList packageNames = value(document,XapianValues::PKGNAMES).split(QLatin1Char(';'),QString::SkipEmptyParts); component.setPackageNames(packageNames); // Bundles @@ -193,7 +193,7 @@ Component xapianDocToComponent(Xapian::Document document) { component.setDescription(description); // Categories - QStringList categories = value(document, XapianValues::CATEGORIES).split(";"); + QStringList categories = value(document, XapianValues::CATEGORIES).split(QLatin1Char(';')); component.setCategories(categories); // Screenshots @@ -215,7 +215,7 @@ Component xapianDocToComponent(Xapian::Document document) { const Screenshots_Image& pb_img = pb_scr.image(j); Appstream::Image image; - image.setUrl(QString::fromStdString(pb_img.url())); + image.setUrl(QUrl(QString::fromStdString(pb_img.url()))); image.setWidth(pb_img.width ()); image.setHeight(pb_img.height ()); @@ -233,7 +233,7 @@ Component xapianDocToComponent(Xapian::Document document) { component.setScreenshots(screenshots); // Compulsory-for-desktop information - QStringList compulsory = value(document, XapianValues::COMPULSORY_FOR).split(";"); + QStringList compulsory = value(document, XapianValues::COMPULSORY_FOR).split(QLatin1Char(';')); component.setCompulsoryForDesktops(compulsory); // License @@ -355,8 +355,8 @@ QueryPair buildQueries(QString searchTerm, const QStringList& categories, Xapian Xapian::Query pkgQuery = Xapian::Query (); // try split on one magic char - if(searchTerm.contains(',')) { - QStringList parts = searchTerm.split(','); + if(searchTerm.contains(QLatin1Char(','))) { + QStringList parts = searchTerm.split(QLatin1Char(',')); Q_FOREACH(const QString& part, parts) { pkgQuery = Xapian::Query (Xapian::Query::OP_OR, pkgQuery, @@ -367,7 +367,7 @@ QueryPair buildQueries(QString searchTerm, const QStringList& categories, Xapian } } else { // try another - QStringList parts = searchTerm.split('\n'); + QStringList parts = searchTerm.split(QLatin1Char('\n')); Q_FOREACH(const QString& part, parts) { pkgQuery = Xapian::Query (Xapian::Query::OP_OR, Xapian::Query("XP" + part.trimmed().toStdString()), @@ -379,9 +379,9 @@ QueryPair buildQueries(QString searchTerm, const QStringList& categories, Xapian } // get a search query - if (!searchTerm.contains (':')) { // ie, not a mimetype query + if (!searchTerm.contains (QLatin1Char(':'))) { // ie, not a mimetype query // we need this to work around xapian oddness - searchTerm = searchTerm.replace('-','_'); + searchTerm = searchTerm.replace(QLatin1Char('-'), QLatin1Char('_')); } Xapian::QueryParser parser = newAppStreamParser (db); @@ -441,6 +441,6 @@ QList Database::findComponentsByPackageName(const QString& packageNam } -Database::Database() : d(new DatabasePrivate(QLatin1String("/var/cache/app-info/xapian/default"))) { +Database::Database() : d(new DatabasePrivate(QStringLiteral("/var/cache/app-info/xapian/default"))) { } diff --git a/qt/provides.cpp b/qt/provides.cpp index 5929b42e..496b2389 100644 --- a/qt/provides.cpp +++ b/qt/provides.cpp @@ -54,7 +54,7 @@ Provides::Kind Provides::kind() const { static QHash buildProvidesKindMap() { QHash map; - map.insert(Provides::KindLibrary, QLatin1String("lib")); + map.insert(Provides::KindLibrary, QStringLiteral("lib")); map.insert(Provides::KindBinary, QLatin1String("bin")); map.insert(Provides::KindMimetype, QLatin1String("mimetype")); map.insert(Provides::KindFont, QLatin1String("font")); diff --git a/qt/test/qtdbreadtest.cpp b/qt/test/qtdbreadtest.cpp index 75208742..f475e3a5 100644 --- a/qt/test/qtdbreadtest.cpp +++ b/qt/test/qtdbreadtest.cpp @@ -16,13 +16,10 @@ void DatabaseReadTest::testRead01() { // first, create a new database QProcess *p = new QProcess(this); - QStringList args; QTemporaryDir dbdir; QVERIFY(dbdir.isValid()); - args.append("refresh-index"); - args.append("--datapath=" AS_SAMPLE_DATA); - args.append("--dbpath=" + dbdir.path()); + const QStringList args = { "refresh-index", "--datapath=" AS_SAMPLE_DATA, "--dbpath=" + dbdir.path()}; p->start(ASCLI_EXECUTABLE, args); p->waitForFinished(); @@ -42,7 +39,7 @@ void DatabaseReadTest::testRead01() Component cpt = db->componentById("neverball.desktop"); QVERIFY(!cpt.id().isEmpty()); - QVERIFY(cpt.name() == "Neverball"); + QCOMPARE(cpt.name(), QLatin1String("Neverball")); delete db; } diff --git a/qt/test/testpaths.h.in b/qt/test/testpaths.h.in index 9b8ccdca..ac50b367 100644 --- a/qt/test/testpaths.h.in +++ b/qt/test/testpaths.h.in @@ -2,7 +2,7 @@ #ifndef __TEST_DATAPATHS_H #define __TEST_DATAPATHS_H -#define ASCLI_EXECUTABLE "@CMAKE_BINARY_DIR@/tools/appstreamcli" +#define ASCLI_EXECUTABLE QStringLiteral("@CMAKE_BINARY_DIR@/tools/appstreamcli") #define AS_SAMPLE_DATA "@CMAKE_SOURCE_DIR@/tests/samples/distro" #endif // __TEST_DATAPATHS_H