refact: assuming all applications have been launched during AM create
storage at first time issue: https://github.com/linuxdeepin/developer-center/issues/5768 Signed-off-by: ComixHe <heyuming@deepin.org>
This commit is contained in:
		@ -36,6 +36,7 @@ ApplicationManager1Storage::createApplicationManager1Storage(const QString &stor
 | 
			
		||||
    auto content = obj->m_file->readAll();
 | 
			
		||||
    if (content.isEmpty()) {  // new file
 | 
			
		||||
        obj->setVersion(STORAGE_VERSION);
 | 
			
		||||
        obj->setFirstLaunch(true);
 | 
			
		||||
        return obj;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -46,8 +47,11 @@ ApplicationManager1Storage::createApplicationManager1Storage(const QString &stor
 | 
			
		||||
    if (err.error != QJsonParseError::NoError) {
 | 
			
		||||
        qDebug() << "parse json failed:" << err.errorString() << "clear this file content.";
 | 
			
		||||
        obj->m_file->resize(0);
 | 
			
		||||
        obj->setVersion(STORAGE_VERSION);
 | 
			
		||||
        obj->setFirstLaunch(true);
 | 
			
		||||
    } else {
 | 
			
		||||
        obj->m_data = json.object();
 | 
			
		||||
        obj->setFirstLaunch(false);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return obj;
 | 
			
		||||
@ -95,6 +99,17 @@ uint8_t ApplicationManager1Storage::version() const noexcept
 | 
			
		||||
    return m_data["version"].toInt(-1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ApplicationManager1Storage::setFirstLaunch(bool first) noexcept
 | 
			
		||||
{
 | 
			
		||||
    m_data["FirstLaunch"] = first;
 | 
			
		||||
    return writeToFile();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
[[nodiscard]] bool ApplicationManager1Storage::firstLaunch() const noexcept
 | 
			
		||||
{
 | 
			
		||||
    return m_data["FirstLaunch"].toBool(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ApplicationManager1Storage::createApplicationValue(const QString &appId,
 | 
			
		||||
                                                        const QString &groupName,
 | 
			
		||||
                                                        const QString &valueKey,
 | 
			
		||||
 | 
			
		||||
@ -38,6 +38,9 @@ public:
 | 
			
		||||
    bool setVersion(uint8_t version) noexcept;
 | 
			
		||||
    [[nodiscard]] uint8_t version() const noexcept;
 | 
			
		||||
 | 
			
		||||
    bool setFirstLaunch(bool first) noexcept;
 | 
			
		||||
    [[nodiscard]] bool firstLaunch() const noexcept;
 | 
			
		||||
 | 
			
		||||
    static std::shared_ptr<ApplicationManager1Storage> createApplicationManager1Storage(const QString &storageDir) noexcept;
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
@ -84,6 +84,9 @@ void ApplicationManager1Service::initService(QDBusConnection &connection) noexce
 | 
			
		||||
 | 
			
		||||
    scanInstances();
 | 
			
		||||
 | 
			
		||||
    auto storagePtr = m_storage.lock();
 | 
			
		||||
    storagePtr->setFirstLaunch(false);
 | 
			
		||||
 | 
			
		||||
    loadHooks();
 | 
			
		||||
 | 
			
		||||
    if (auto *ptr = new (std::nothrow) PropertiesForwarder{DDEApplicationManager1ObjectPath, this}; ptr == nullptr) {
 | 
			
		||||
 | 
			
		||||
@ -47,14 +47,21 @@ ApplicationService::ApplicationService(DesktopFile source,
 | 
			
		||||
 | 
			
		||||
    auto appId = id();
 | 
			
		||||
    auto value = storagePtr->readApplicationValue(appId, ApplicationPropertiesGroup, LastLaunchedTime);
 | 
			
		||||
    if (value.isNull()) {
 | 
			
		||||
        if (!storagePtr->createApplicationValue(
 | 
			
		||||
                appId, ApplicationPropertiesGroup, LastLaunchedTime, QVariant::fromValue<qint64>(0))) {
 | 
			
		||||
            m_lastLaunch = -1;
 | 
			
		||||
        }
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
    qint64 val{0};
 | 
			
		||||
    if (storagePtr->firstLaunch()) {
 | 
			
		||||
        val = QDateTime::currentMSecsSinceEpoch();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (value.isNull()) {
 | 
			
		||||
        if (!storagePtr->createApplicationValue(appId, ApplicationPropertiesGroup, LastLaunchedTime, QVariant::fromValue(val))) {
 | 
			
		||||
            m_lastLaunch = -1;
 | 
			
		||||
        } else {
 | 
			
		||||
            m_lastLaunch = val;
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        m_lastLaunch = value.toLongLong();
 | 
			
		||||
    }
 | 
			
		||||
    m_lastLaunch = value.toInt();
 | 
			
		||||
 | 
			
		||||
    value = storagePtr->readApplicationValue(appId, ApplicationPropertiesGroup, ScaleFactor);
 | 
			
		||||
    if (!value.isNull()) {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user