New upstream version 5.5.33
authorClay Stan <claystan97@gmail.com>
Tue, 2 Aug 2022 05:11:03 +0000 (13:11 +0800)
committerClay Stan <claystan97@gmail.com>
Tue, 2 Aug 2022 05:11:03 +0000 (13:11 +0800)
.github/workflows/call-clacheck.yml [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
archlinux/PKGBUILD [new file with mode: 0644]
debian/rules
doc/CMakeLists.txt [new file with mode: 0644]
src/dconfig.cpp
src/dconfigfile.cpp
src/dsysinfo.cpp
tests/ut_dutil.cpp

diff --git a/.github/workflows/call-clacheck.yml b/.github/workflows/call-clacheck.yml
new file mode 100644 (file)
index 0000000..3fa07a3
--- /dev/null
@@ -0,0 +1,16 @@
+name: Call CLA check
+on:
+  issue_comment:
+    types: [created]
+  pull_request_target:
+    types: [opened, closed, synchronize]
+
+concurrency:
+  group: ${{ github.workflow }}-pull/${{ github.event.number }}
+  cancel-in-progress: true
+
+jobs:
+  clacheck:
+    uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master
+    secrets:
+      APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }}
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4b69a49
--- /dev/null
@@ -0,0 +1,16 @@
+cmake_minimum_required (VERSION 3.10)
+
+project (DtkCore
+       VERSION "${DTK_REPO_MODULE_VERSION}"
+       DESCRIPTION "DTK Core module"
+       HOMEPAGE_URL ""
+       LANGUAGES CXX C
+)
+
+find_package (Qt5 CONFIG REQUIRED COMPONENTS DBus Xml)
+
+set (BUILD_DOCS ON CACHE BOOL "Generate doxygen-based documentation")
+
+if (BUILD_DOCS)
+       add_subdirectory(doc)
+endif ()
diff --git a/archlinux/PKGBUILD b/archlinux/PKGBUILD
new file mode 100644 (file)
index 0000000..099b590
--- /dev/null
@@ -0,0 +1,30 @@
+# Maintainer: justforlxz <justforlxz@gmail.com>
+pkgname=dtkcore-git
+pkgver=5.5.23.r5.g74f86b0
+pkgrel=1
+pkgdesc='DTK core modules'
+arch=('x86_64' 'aarch64')
+url="https://github.com/linuxdeepin/dtkcore"
+license=('LGPL3')
+depends=('dconf' 'deepin-desktop-base-git' 'python' 'gsettings-qt' 'lshw')
+makedepends=('git' 'qt5-tools' 'gtest' 'dtkcommon-git')
+conflicts=('dtkcore')
+provides=('dtkcore')
+groups=('deepin-git')
+source=('source.tar.gz')
+sha512sums=('SKIP')
+
+prepare() {
+    cd $deepin_source_name
+}
+
+build() {
+  cd $deepin_source_name
+  qmake-qt5 PREFIX=/usr DTK_VERSION=$pkgver LIB_INSTALL_DIR=/usr/lib
+  make
+}
+
+package() {
+  cd $deepin_source_name
+  make INSTALL_ROOT="$pkgdir" install
+}
index 7abf4a244c103b81649a0fd7acf310bf12caccc0..63b9b64cbc9c3057f30e78574d83f751457b0eac 100755 (executable)
@@ -15,7 +15,7 @@ else
 endif
 
 %:
-       dh $@ --parallel
+       dh $@ --buildsystem=qmake --parallel
 
 override_dh_auto_configure:
        dh_auto_configure -- LIB_INSTALL_DIR=/usr/lib/$(DEB_HOST_MULTIARCH) VERSION=$(CONFIG_VERSION)
diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..6ec0386
--- /dev/null
@@ -0,0 +1,38 @@
+cmake_minimum_required (VERSION 3.10)
+
+find_package (Doxygen REQUIRED)
+
+set (QCH_INSTALL_DESTINATION ${CMAKE_INSTALLL_PREFIX}/share/DDE/dtk CACHE STRING "QCH install location")
+
+set (DOXYGEN_GENERATE_HTML "NO" CACHE STRING "Doxygen HTML output")
+set (DOXYGEN_GENERATE_XML "NO" CACHE STRING "Doxygen XML output")
+set (DOXYGEN_GENERATE_QHP "YES" CACHE STRING "Doxygen QHP output")
+set (DOXYGEN_FILE_PATTERNS *.cpp *.h *.md *.zh_CN.dox CACHE STRING "Doxygen File Patterns")
+set (DOXYGEN_PROJECT_NUMBER ${CMAKE_PROJECT_VERSION} CACHE STRING "") # Should be the same as this project is using.
+set (DOXYGEN_EXTRACT_STATIC YES)
+set (DOXYGEN_OUTPUT_LANGUAGE "Chinese")
+set (DOXYGEN_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/docs/)
+set (DOXYGEN_QHG_LOCATION "qhelpgenerator")
+set (DOXYGEN_QHP_NAMESPACE "org.deepin.dtk.core")
+set (DOXYGEN_QCH_FILE "dtkcore.qch")
+set (DOXYGEN_QHP_VIRTUAL_FOLDER "dtkcore")
+set (DOXYGEN_HTML_EXTRA_STYLESHEET "" CACHE STRING "Doxygen custom stylesheet for HTML output")
+set (DOXYGEN_TAGFILES "qtcore.tags=qthelp://org.qt-project.qtcore/qtcore/" CACHE STRING "Doxygen tag files")
+
+set (DOXYGEN_PREDEFINED
+    "\"DCORE_BEGIN_NAMESPACE=namespace Dtk { namespace Core {\""
+    "\"DCORE_END_NAMESPACE=}}\""
+    "\"DCORE_USE_NAMESPACE=using Dtk::Core\""
+)
+set (DOXYGEN_MACRO_EXPANSION "YES")
+set (DOXYGEN_EXPAND_ONLY_PREDEF "YES")
+
+doxygen_add_docs (doxygen
+    ${PROJECT_SOURCE_DIR}/src
+    ${PROJECT_SOURCE_DIR}/doc
+    ALL
+    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+    COMMENT "Generate documentation via Doxygen"
+)
+
+install (FILES ${PROJECT_BINARY_DIR}/docs/html/dtkcore.qch DESTINATION ${QCH_INSTALL_DESTINATION})
index 33b04df7c34eb044f1a9465117af1f274ae61bc8..18bc6cc69685891a540e3124ef6f0495e9beae92 100644 (file)
@@ -341,9 +341,13 @@ public:
 
     virtual QVariant value(const QString &key, const QVariant &fallback) const override
     {
-        const QDBusVariant &dv = config->value(key);
-        const QVariant &v = dv.variant();
-        return v.isValid() ? decodeQDBusArgument(v) : fallback;
+        auto reply = config->value(key);
+        reply.waitForFinished();
+        if (reply.isError()) {
+            qWarning() << "value error key:" << key << ", error message:" << reply.error().message();
+            return fallback;
+        }
+        return decodeQDBusArgument(reply.value().variant());
     }
 
     virtual void setValue(const QString &key, const QVariant &value) override
index 8db11d5d68e68b5b5ea5f3b98ccd93ded5deb14d..98d6424288e4678aed90af14121968ad75a18649 100644 (file)
@@ -386,14 +386,18 @@ public:
         values.remove(key);
     }
 
-    inline void update(const QString &key, const QVariantHash &value)
+    inline bool update(const QString &key, const QVariantHash &value)
     {
+        if (!value.contains("value")) {
+            return false;
+        }
         values[key] = value;
+        return true;
     }
 
-    inline void updateValue(const QString &key, const QJsonValue &value)
+    inline bool updateValue(const QString &key, const QJsonValue &value)
     {
-        overrideValue(key, "value", value);
+        return overrideValue(key, "value", value);
     }
 
     inline void updateSerial(const QString &key, const QJsonValue &value)
@@ -415,11 +419,15 @@ public:
         return contents;
     }
 private:
-    void overrideValue(const QString &key, const QString &subkey, const QJsonValue &from) {
+    bool overrideValue(const QString &key, const QString &subkey, const QJsonValue &from) {
         const QJsonValue &v = from[subkey];
 
-        if (!v.isUndefined())
-            values[key][subkey] = v.toVariant();
+        if (v.isUndefined()) {
+            return false;
+        }
+
+        values[key][subkey] = v.toVariant();
+        return true;
     }
 
     QHash<QString, QVariantHash> values;
@@ -698,14 +706,15 @@ public:
 
             // 初始化原始值
             for (; i != contents.constEnd(); ++i) {
-                values.update(i.key(), i.value().toObject().toVariantHash());
+                if (!values.update(i.key(), i.value().toObject().toVariantHash())) {
+                    qWarning() << "key:" << i.key() << "has no value";
+                    return false;
+                }
             }
         }
-
         // for override
         Q_FOREACH(auto override, overrides) {
             const QJsonDocument &doc = loadJsonFile(override);
-
             if (doc.isObject()) {
                 const QJsonObject &root = doc.object();
                 if (!checkMagic(root, MAGIC_OVERRIDE)) {
@@ -734,7 +743,10 @@ public:
                     if (values.flags(i.key()) & DConfigFile::NoOverride)
                         continue;
 
-                    values.updateValue(i.key(), i.value());
+                    if (!values.updateValue(i.key(), i.value())) {
+                        qWarning() << "key (override):" << i.key() << "has no value";
+                        return false;
+                    }
                     values.updateSerial(i.key(), i.value());
                     values.updatePermissions(i.key(), i.value());
                 }
index 02c5789858058f996d1b8be728aae6be4ce06c02..715a84ff5daf0f51337897291e9dbef497746b2f 100644 (file)
@@ -250,10 +250,10 @@ bool DSysInfoPrivate::ensureOsVersion()
     D_ASSET_EXIT(entry.status() == DDesktopEntry::NoError, entry.status());
 
     // 先获取版本信息
-    // ABCDE.xyz
+    // ABCDE.xyz.abc
     QString osb = entry.stringValue("OsBuild", "Version");
     QStringList osbs = osb.split(".");
-    ok = (osbs.size() == 2 && osbs.value(0).size() == 5);
+    ok = (osbs.size() >= 2 && osbs.value(0).size() == 5);
     D_ASSET_EXIT(ok, "OsBuild version invalid!");
 
     const QStringList &left = osbs.value(0).split(QString(), QString::SkipEmptyParts);
@@ -261,19 +261,19 @@ bool DSysInfoPrivate::ensureOsVersion()
 
     int idx = 0;
     osBuild.A = left.value(idx++, "0").toUInt(&ok);
-    D_ASSET_EXIT(ok, "OsBuild version(a) invalid!");
+    D_ASSET_EXIT(ok, "OsBuild version(A) invalid!");
     osBuild.B = left.value(idx++, "0").toUInt(&ok);
-    D_ASSET_EXIT(ok, "OsBuild version(b) invalid!");
+    D_ASSET_EXIT(ok, "OsBuild version(B) invalid!");
     osBuild.C = left.value(idx++, "0").toUInt(&ok);
     if (!ok) {
         auto c = left.value(idx-1, "0").toLatin1();
-        D_ASSET_EXIT(c.size()>0, "OsBuild version(c) invalid!");
+        D_ASSET_EXIT(c.size()>0, "OsBuild version(C) invalid!");
         osBuild.C = uint(c.at(0));
     }
     osBuild.D = left.value(idx++, "0").toUInt(&ok);
-    D_ASSET_EXIT(ok, "OsBuild version(d) invalid!");
+    D_ASSET_EXIT(ok, "OsBuild version(D) invalid!");
     osBuild.E = left.value(idx++, "0").toUInt(&ok);
-    D_ASSET_EXIT(ok, "OsBuild version(e) invalid!");
+    D_ASSET_EXIT(ok, "OsBuild version(E) invalid!");
 
     // xyz
     osBuild.xyz = osbs.value(1).trimmed().toUInt(&ok);
@@ -802,8 +802,9 @@ QString DSysInfo::minorVersion()
  */
 QString DSysInfo::buildVersion()
 {
-    siGlobal->ensureOsVersion();
-    return QString::number(siGlobal->osBuild.xyz);
+    DDesktopEntry entry(OS_VERSION_FILE);
+    QString osb = entry.stringValue("OsBuild", "Version");
+    return osb.mid(6).trimmed();
 }
 #endif
 
index e021e96eead377ba92d86f2da071d925e23e4466..e90401485ce9dcca4da8b505263398e97b3889d1 100644 (file)
@@ -309,7 +309,7 @@ TEST_F(ut_DUtil, testOsVersion)
     entry.setStringValue("专业版", "EditionName[zh_CN]", "Version");
     entry.setStringValue("20", "MajorVersion", "Version");
     entry.setStringValue("100A", "MinorVersion", "Version");
-    entry.setStringValue("11Z18.107", "OsBuild", "Version");
+    entry.setStringValue("11Z18.107.109", "OsBuild", "Version");
     ASSERT_TRUE(entry.save());
 
     ASSERT_TRUE(DSysInfo::uosSystemName(QLocale("C")) == "UnionTech OS Desktop");
@@ -320,7 +320,7 @@ TEST_F(ut_DUtil, testOsVersion)
     ASSERT_TRUE(DSysInfo::uosEditionName(QLocale("C")) == "Professional");
     ASSERT_TRUE(DSysInfo::majorVersion() == "20");
     ASSERT_TRUE(DSysInfo::minorVersion() == "100A");
-    ASSERT_TRUE(DSysInfo::buildVersion() == "107");
+    ASSERT_TRUE(DSysInfo::buildVersion() == "107.109");
 
     // test minVersion.BC SP1….SP99
     for (int i = 0; i < 100; ++i) {