--- /dev/null
+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 }}
--- /dev/null
+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 ()
--- /dev/null
+# 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
+}
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)
--- /dev/null
+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})
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
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)
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;
// 初始化原始值
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)) {
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());
}
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);
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);
*/
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
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");
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) {