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:
ComixHe 2023-11-23 15:01:31 +08:00 committed by Comix
parent 6bfbd63c01
commit b75bb395fd
4 changed files with 35 additions and 7 deletions

View File

@ -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,

View File

@ -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:

View File

@ -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) {

View File

@ -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()) {