From 3f382333066313933224522a5e2df8fbf7c5df99 Mon Sep 17 00:00:00 2001 From: ComixHe Date: Mon, 11 Sep 2023 13:01:20 +0800 Subject: [PATCH] refact: use QFileInfo to get File's timeInfo Signed-off-by: ComixHe --- src/dbus/applicationmanager1service.cpp | 4 ++-- src/desktopentry.cpp | 6 +++--- src/desktopentry.h | 10 +++++----- src/global.h | 26 +++++++++++-------------- 4 files changed, 21 insertions(+), 25 deletions(-) diff --git a/src/dbus/applicationmanager1service.cpp b/src/dbus/applicationmanager1service.cpp index 1cdc52e..cfee1f1 100644 --- a/src/dbus/applicationmanager1service.cpp +++ b/src/dbus/applicationmanager1service.cpp @@ -328,9 +328,9 @@ void ApplicationManager1Service::updateApplication(const QSharedPointerdesktopFileSource().modified(std::get<1>(mtime))) { + if (destApp->desktopFileSource().modified(timeInfo.mtime)) { auto *newEntry = new (std::nothrow) DesktopEntry{}; if (newEntry == nullptr) { qCritical() << "new DesktopEntry failed."; diff --git a/src/desktopentry.cpp b/src/desktopentry.cpp index aad79ce..47b4028 100644 --- a/src/desktopentry.cpp +++ b/src/desktopentry.cpp @@ -238,9 +238,9 @@ bool DesktopEntry::checkMainEntryValidation() const noexcept if (type == it->end()) { qWarning() << "No Type."; for (auto tmp = it->constKeyValueBegin(); tmp != it->constKeyValueEnd(); ++tmp) { - const auto& [k,v] = *tmp; + const auto &[k, v] = *tmp; qInfo() << "keyName:" << k; - for (auto valIt = v.constKeyValueBegin() ; valIt != v.constKeyValueEnd(); ++valIt) { + for (auto valIt = v.constKeyValueBegin(); valIt != v.constKeyValueEnd(); ++valIt) { const auto &[key, value] = *valIt; qInfo() << key << value; } @@ -364,7 +364,7 @@ std::optional DesktopFile::searchDesktopFileById(const QString &app return std::nullopt; } -bool DesktopFile::modified(std::size_t time) const noexcept +bool DesktopFile::modified(qint64 time) const noexcept { return time != m_mtime; } diff --git a/src/desktopentry.h b/src/desktopentry.h index ce8b564..e3827e2 100644 --- a/src/desktopentry.h +++ b/src/desktopentry.h @@ -47,8 +47,8 @@ struct DesktopFile [[nodiscard]] QFile *sourceFile() const noexcept { return &sourceFileRef(); }; [[nodiscard]] QFile &sourceFileRef() const noexcept { return *m_fileSource; }; [[nodiscard]] const QString &desktopId() const noexcept { return m_desktopId; } - [[nodiscard]] bool modified(std::size_t time) const noexcept; - [[nodiscard]] std::size_t createTime() const noexcept { return m_ctime; } + [[nodiscard]] bool modified(qint64 time) const noexcept; + [[nodiscard]] qint64 createTime() const noexcept { return m_ctime; } static std::optional searchDesktopFileById(const QString &appId, DesktopErrorCode &err) noexcept; static std::optional searchDesktopFileByPath(const QString &desktopFilePath, DesktopErrorCode &err) noexcept; @@ -56,7 +56,7 @@ struct DesktopFile static std::optional createTemporaryDesktopFile(std::unique_ptr temporaryFile) noexcept; private: - DesktopFile(std::unique_ptr source, QString fileId, std::size_t mtime, std::size_t ctime) + DesktopFile(std::unique_ptr source, QString fileId, qint64 mtime, qint64 ctime) : m_mtime(mtime) , m_ctime(ctime) , m_fileSource(std::move(source)) @@ -64,8 +64,8 @@ private: { } - std::size_t m_mtime; - std::size_t m_ctime; + qint64 m_mtime; + qint64 m_ctime; std::unique_ptr m_fileSource{nullptr}; QString m_desktopId{""}; }; diff --git a/src/global.h b/src/global.h index 7c3c2be..c709803 100644 --- a/src/global.h +++ b/src/global.h @@ -468,23 +468,19 @@ ObjectMap dumpDBusObject(const QMap> &map) return objs; } -inline std::tuple getFileTimeInfo(const QFileInfo &file) +struct FileTimeInfo { - struct stat buf; + qint64 mtime; + qint64 ctime; + qint64 atime; +}; - // TODO: use QFileInfo get timeInfo, and return a custom time structure. - if (auto ret = stat(file.absoluteFilePath().toLocal8Bit().constData(), &buf); ret == -1) { - qWarning() << "get file" << file.absoluteFilePath() << "state failed:" << std::strerror(errno); - return std::make_tuple(0, 0, 0); - } - - constexpr std::size_t secToNano = 1e9; - - auto mtime = buf.st_mtim.tv_sec * secToNano + buf.st_mtim.tv_nsec; - auto ctime = buf.st_ctim.tv_sec * secToNano + buf.st_ctim.tv_nsec; - auto atime = buf.st_atim.tv_sec * secToNano + buf.st_atim.tv_nsec; - - return std::make_tuple(ctime, mtime, atime); +inline FileTimeInfo getFileTimeInfo(const QFileInfo &file) +{ + auto mtime = file.lastModified().toMSecsSinceEpoch(); + auto atime = file.lastRead().toMSecsSinceEpoch(); + auto ctime = file.birthTime().toMSecsSinceEpoch(); + return {mtime, ctime, atime}; } #endif