diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-11 22:08:25 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-11 22:08:25 +1000 |
| commit | b87d5bf20eeea7f6a865066f9a39f7fd084df8ee (patch) | |
| tree | d3e491231cefd793ccd9f44304e7395ea013d3ad /plugin/src/Caelestia/filesystemmodel.cpp | |
| parent | plugin/appdb: fix persistence (diff) | |
| download | caelestia-shell-b87d5bf20eeea7f6a865066f9a39f7fd084df8ee.tar.gz caelestia-shell-b87d5bf20eeea7f6a865066f9a39f7fd084df8ee.tar.bz2 caelestia-shell-b87d5bf20eeea7f6a865066f9a39f7fd084df8ee.zip | |
plugin: format + refactor
Diffstat (limited to 'plugin/src/Caelestia/filesystemmodel.cpp')
| -rw-r--r-- | plugin/src/Caelestia/filesystemmodel.cpp | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/filesystemmodel.cpp b/plugin/src/Caelestia/filesystemmodel.cpp index 9a435a8..54807b5 100644 --- a/plugin/src/Caelestia/filesystemmodel.cpp +++ b/plugin/src/Caelestia/filesystemmodel.cpp @@ -6,6 +6,70 @@ namespace caelestia { +FileSystemEntry::FileSystemEntry(const QString& path, const QString& relativePath, QObject* parent) + : QObject(parent) + , m_fileInfo(QFileInfo(path)) + , m_path(path) + , m_relativePath(relativePath) + , m_isImageInitialised(false) + , m_mimeTypeInitialised(false) {} + +QString FileSystemEntry::path() const { + return m_path; +}; + +QString FileSystemEntry::relativePath() const { + return m_relativePath; +}; + +QString FileSystemEntry::name() const { + return m_fileInfo.fileName(); +}; + +QString FileSystemEntry::parentDir() const { + return m_fileInfo.absolutePath(); +}; + +QString FileSystemEntry::suffix() const { + return m_fileInfo.completeSuffix(); +}; + +qint64 FileSystemEntry::size() const { + return m_fileInfo.size(); +}; + +bool FileSystemEntry::isDir() const { + return m_fileInfo.isDir(); +}; + +bool FileSystemEntry::isImage() const { + if (!m_isImageInitialised) { + QImageReader reader(m_path); + m_isImage = reader.canRead(); + m_isImageInitialised = true; + } + return m_isImage; +} + +QString FileSystemEntry::mimeType() const { + if (!m_mimeTypeInitialised) { + const QMimeDatabase db; + m_mimeType = db.mimeTypeForFile(m_path).name(); + m_mimeTypeInitialised = true; + } + return m_mimeType; +} + +FileSystemModel::FileSystemModel(QObject* parent) + : QAbstractListModel(parent) + , m_recursive(false) + , m_watchChanges(true) + , m_showHidden(false) + , m_filter(NoFilter) { + connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::watchDirIfRecursive); + connect(&m_watcher, &QFileSystemWatcher::directoryChanged, this, &FileSystemModel::updateEntriesForDir); +} + int FileSystemModel::rowCount(const QModelIndex& parent) const { if (parent != QModelIndex()) { return 0; |