From e45f53d224ca26bf526db672cdfe30a3218bb2fc Mon Sep 17 00:00:00 2001 From: zhangkun Date: Fri, 27 Mar 2026 11:40:37 +0800 Subject: [PATCH] chore: update license info loading and search paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Extended copyright year range from 2023 to 2023-2026 2. Added support for automatic license file discovery in standard data locations 3. When no file path is provided, now searches for application-specific JSON config in deepin/credits directory 4. Enhanced license content search to check both custom-licenses and spdx-licenses directories in all standard data locations 5. Improved code organization with constants for directory names 6. Simplified license content loading logic with early returns chore: 更新许可证信息加载和搜索路径 1. 将版权年份范围从2023年扩展到2023-2026年 2. 添加对标准数据位置中自动发现许可证文件的支持 3. 当未提供文件路径时,现在会在deepin/credits目录中搜索应用程序特定的 JSON配置 4. 增强许可证内容搜索,在所有标准数据位置中检查custom-licenses和spdx- licenses目录 5. 使用常量优化目录名称的代码组织 6. 通过提前返回简化许可证内容加载逻辑 PMS: TASK-387863 --- src/dlicenseinfo.cpp | 47 ++++++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/dlicenseinfo.cpp b/src/dlicenseinfo.cpp index dbc56a6d..13348a02 100644 --- a/src/dlicenseinfo.cpp +++ b/src/dlicenseinfo.cpp @@ -1,4 +1,4 @@ -// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. +// SPDX-FileCopyrightText: 2023 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later @@ -11,9 +11,16 @@ #include #include #include +#include +#include DCORE_BEGIN_NAMESPACE +// /usr/share/spdx-licenses +constexpr auto SystemLicenseDir = "spdx-licenses"; +constexpr auto CustomLicenseDir = "custom-licenses"; +constexpr auto SystemConfigDir = "deepin/credits"; + class DLicenseInfo::DComponentInfoPrivate : public DObjectPrivate { public: @@ -90,6 +97,16 @@ DLicenseInfoPrivate::~DLicenseInfoPrivate() bool DLicenseInfoPrivate::loadFile(const QString &file) { + clear(); + if (file.isEmpty()) { + const QString relPath = QString("%1/%2.json").arg(SystemConfigDir, qApp->applicationName()); + for (const QString &dataDir : QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation)) { + const QString file = dataDir + '/' + relPath; + if (QFile::exists(file)) + return loadFile(file); + } + return false; + } QFile jsonFile(file); if (!jsonFile.open(QIODevice::ReadOnly)) { qWarning() << QString("Failed on open file: \"%1\", error message: \"%2\"").arg( @@ -141,24 +158,20 @@ bool DLicenseInfoPrivate::loadContent(const QByteArray &content) QByteArray DLicenseInfoPrivate::licenseContent(const QString &licenseName) { - QByteArray content; - QStringList dirs{"/usr/share/spdx-license"}; + const QStringList dataDirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); + QStringList searchDirs; if (!licenseSearchPath.isEmpty()) - dirs.prepend(licenseSearchPath); - for (const QString &dir : dirs) { - QFile file(QString("%1/%2.txt").arg(dir).arg(licenseName)); - if (!file.exists()) - continue; - if (file.open(QIODevice::ReadOnly)) { - content = file.readAll(); - file.close(); - break; - } - } - if (content.isEmpty()) { - qWarning() << QString("License content is empty when getting license content!"); + searchDirs << licenseSearchPath; + for (const QString &dataDir : dataDirs) + for (const auto *dir : {CustomLicenseDir, SystemLicenseDir}) + searchDirs << (dataDir + '/' + dir); + + for (const QString &dir : searchDirs) { + QFile file(dir + '/' + licenseName + ".txt"); + if (file.open(QIODevice::ReadOnly)) + return file.readAll(); } - return content; + return {}; } void DLicenseInfoPrivate::clear()