From 4123262258814146b2b05e1120d31959f1d4c201 Mon Sep 17 00:00:00 2001 From: kegechen Date: Thu, 1 Aug 2019 19:59:08 +0800 Subject: [PATCH] feat: add Wrapper of Gio (#13) add Wrapper of Gio::File::query_info add Wrapper of Gio::FileInfo::get_size --- gio-qt/include/dgiofile.h | 1 + gio-qt/include/dgiofileinfo.h | 1 + gio-qt/source/dgiofile.cpp | 26 ++++++++++++++++++++++++++ gio-qt/source/dgiofileinfo.cpp | 12 ++++++++++++ qgio-tools/main.cpp | 12 +++++++++++- 5 files changed, 51 insertions(+), 1 deletion(-) diff --git a/gio-qt/include/dgiofile.h b/gio-qt/include/dgiofile.h index f73b310..98a0c78 100644 --- a/gio-qt/include/dgiofile.h +++ b/gio-qt/include/dgiofile.h @@ -52,6 +52,7 @@ public: QString basename() const; QString path() const; QString uri() const; + QExplicitlySharedDataPointer createFileInfo(QString attr = "*", DGioFileQueryInfoFlags queryInfoFlags = FILE_QUERY_INFO_NONE); QExplicitlySharedDataPointer createFileSystemInfo(QString attr = "*"); QExplicitlySharedDataPointer createFileIterator(QString attr = "*", DGioFileQueryInfoFlags queryInfoFlags = FILE_QUERY_INFO_NONE); void createFileIteratorAsync(QString attr = "*", DGioFileQueryInfoFlags queryInfoFlags = FILE_QUERY_INFO_NONE); diff --git a/gio-qt/include/dgiofileinfo.h b/gio-qt/include/dgiofileinfo.h index 21d8f3e..9200208 100644 --- a/gio-qt/include/dgiofileinfo.h +++ b/gio-qt/include/dgiofileinfo.h @@ -50,6 +50,7 @@ public: // file info QString displayName() const; DGioFileType fileType() const; + quint64 fileSize() const; // filesystem info. bool fsReadOnly() const; diff --git a/gio-qt/source/dgiofile.cpp b/gio-qt/source/dgiofile.cpp index f069fbe..0740daf 100644 --- a/gio-qt/source/dgiofile.cpp +++ b/gio-qt/source/dgiofile.cpp @@ -178,6 +178,32 @@ QString DGioFile::uri() const return d->uri(); } +/*! + * \brief Gets the requested information about the file. + * + * Wrapper of Gio::File::query_info(const std::string& attributes = "*", FileQueryInfoFlags flags = FILE_QUERY_INFO_NONE). + * + * \return the created file info object, or nullptr if create failed. + */ +QExplicitlySharedDataPointer DGioFile::createFileInfo(QString attr, DGioFileQueryInfoFlags queryInfoFlags) +{ + Q_D(DGioFile); + + try { + unsigned int flagValue = queryInfoFlags; + FileQueryInfoFlags flags = static_cast(flagValue); + Glib::RefPtr gmmFileInfo = d->getGmmFileInstance()->query_info(attr.toStdString(), flags); + if (gmmFileInfo) { + QExplicitlySharedDataPointer fileInfoPtr(new DGioFileInfo(gmmFileInfo.release())); + return fileInfoPtr; + } + } catch (const Glib::Error &error) { + qDebug() << QString::fromStdString(error.what().raw()); + } + + return QExplicitlySharedDataPointer(nullptr); +} + /*! * \brief Obtains information about the filesystem the file is on. * diff --git a/gio-qt/source/dgiofileinfo.cpp b/gio-qt/source/dgiofileinfo.cpp index dae0d3a..4d42fa9 100644 --- a/gio-qt/source/dgiofileinfo.cpp +++ b/gio-qt/source/dgiofileinfo.cpp @@ -115,6 +115,18 @@ DGioFileType DGioFileInfo::fileType() const return static_cast(d->getGmmFileInfoInstance()->get_file_type()); } +/*! + * \brief DGioFileInfo::fileSize + * Wrapper of Gio::FileInfo::get_size() + * \return + */ +quint64 DGioFileInfo::fileSize() const +{ + Q_D(const DGioFileInfo); + + return static_cast(d->getGmmFileInfoInstance()->get_size()); +} + bool DGioFileInfo::fsReadOnly() const { Q_D(const DGioFileInfo); diff --git a/qgio-tools/main.cpp b/qgio-tools/main.cpp index c883c2d..c9271a2 100644 --- a/qgio-tools/main.cpp +++ b/qgio-tools/main.cpp @@ -89,7 +89,17 @@ int main(int argc, char * argv[]) qDebug() << f->basename() << f->path() << f->uri(); QExplicitlySharedDataPointer fi = f->createFileSystemInfo(); if (fi) { - qDebug() << fi->fsFreeBytes() << fi->fsUsedBytes() << fi->fsTotalBytes() << fi->displayName() << fi->displayName(); + qDebug() << fi->fsFreeBytes() << fi->fsUsedBytes() << fi->fsTotalBytes() << fi->fileType() << fi->displayName(); + } + delete f; + } + + f = DGioFile::createFromPath("/home/mike/Desktop/1.png"); + if (f) { + qDebug() << f->basename() << f->path() << f->uri(); + QExplicitlySharedDataPointer fi = f->createFileInfo(); + if (fi) { + qDebug() << fi->fileType() << fi->displayName() << fi->fileSize(); } delete f; }