QFileSystemModel: add lastModified() overload that takes a QTimeZone
This is useful when sorting by time and using QTimeZone::UTC, since native filesystem API uses UTC, that means less conversions, which is potentially faster. Use UTC internally except for strings that are going to be shown in a GUI to the user, these should be in QTimeZone::LocalTime. [ChangeLog][QtGui][QFileSystemModel] Added lastModified() overload that takes a QTimeZone, this is useful when e.g. comparing file timestamps and all that's needed is time in UTC (this is faster as no time zone conversions is required). QTimeZone::UTC is used internally when sorting by time (using the sort() function), which should ideally make it faster too. Task-number: QTBUG-100349 Change-Id: I0e58f8eb7856b8da7d55db86ddd2c009ff83d970 Reviewed-by: Kai Köhne <kai.koehne@qt.io>
This commit is contained in:
parent
eeb469869e
commit
fe7a0c19a6
@ -51,7 +51,7 @@ public:
|
|||||||
return mFileInfo == fileInfo.mFileInfo
|
return mFileInfo == fileInfo.mFileInfo
|
||||||
&& displayType == fileInfo.displayType
|
&& displayType == fileInfo.displayType
|
||||||
&& permissions() == fileInfo.permissions()
|
&& permissions() == fileInfo.permissions()
|
||||||
&& lastModified() == fileInfo.lastModified();
|
&& lastModified(QTimeZone::UTC) == fileInfo.lastModified(QTimeZone::UTC);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef QT_NO_FSFILEENGINE
|
#ifndef QT_NO_FSFILEENGINE
|
||||||
@ -95,8 +95,8 @@ public:
|
|||||||
return mFileInfo;
|
return mFileInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
QDateTime lastModified() const {
|
QDateTime lastModified(const QTimeZone &tz) const {
|
||||||
return mFileInfo.lastModified();
|
return mFileInfo.lastModified(tz);
|
||||||
}
|
}
|
||||||
|
|
||||||
qint64 size() const {
|
qint64 size() const {
|
||||||
|
@ -529,14 +529,38 @@ QString QFileSystemModel::type(const QModelIndex &index) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
Returns the date and time when \a index was last modified.
|
Returns the date and time (in local time) when \a index was last modified.
|
||||||
|
|
||||||
|
This is an overloaded function, equivalent to calling:
|
||||||
|
\code
|
||||||
|
lastModified(index, QTimeZone::LocalTime);
|
||||||
|
\endcode
|
||||||
|
|
||||||
|
If \a index is invalid, a default constructed QDateTime is returned.
|
||||||
*/
|
*/
|
||||||
QDateTime QFileSystemModel::lastModified(const QModelIndex &index) const
|
QDateTime QFileSystemModel::lastModified(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
return lastModified(index, QTimeZone::LocalTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\since 6.6
|
||||||
|
Returns the date and time, in the time zone \a tz, when
|
||||||
|
\a index was last modified.
|
||||||
|
|
||||||
|
Typical arguments for \a tz are \c QTimeZone::UTC or \c QTimeZone::LocalTime.
|
||||||
|
UTC does not require any conversion from the time returned by the native file
|
||||||
|
system API, therefore getting the time in UTC is potentially faster. LocalTime
|
||||||
|
is typically chosen if the time is shown to the user.
|
||||||
|
|
||||||
|
If \a index is invalid, a default constructed QDateTime is returned.
|
||||||
|
*/
|
||||||
|
QDateTime QFileSystemModel::lastModified(const QModelIndex &index, const QTimeZone &tz) const
|
||||||
{
|
{
|
||||||
Q_D(const QFileSystemModel);
|
Q_D(const QFileSystemModel);
|
||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return QDateTime();
|
return QDateTime();
|
||||||
return d->node(index)->lastModified();
|
return d->node(index)->lastModified(tz);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
@ -765,7 +789,7 @@ QString QFileSystemModelPrivate::time(const QModelIndex &index) const
|
|||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return QString();
|
return QString();
|
||||||
#if QT_CONFIG(datestring)
|
#if QT_CONFIG(datestring)
|
||||||
return QLocale::system().toString(node(index)->lastModified(), QLocale::ShortFormat);
|
return QLocale::system().toString(node(index)->lastModified(QTimeZone::LocalTime), QLocale::ShortFormat);
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(index);
|
Q_UNUSED(index);
|
||||||
return QString();
|
return QString();
|
||||||
@ -1027,10 +1051,12 @@ public:
|
|||||||
}
|
}
|
||||||
case 3:
|
case 3:
|
||||||
{
|
{
|
||||||
if (l->lastModified() == r->lastModified())
|
const QDateTime left = l->lastModified(QTimeZone::UTC);
|
||||||
|
const QDateTime right = r->lastModified(QTimeZone::UTC);
|
||||||
|
if (left == right)
|
||||||
return naturalCompare.compare(l->fileName, r->fileName) < 0;
|
return naturalCompare.compare(l->fileName, r->fileName) < 0;
|
||||||
|
|
||||||
return l->lastModified() < r->lastModified();
|
return left < right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Q_ASSERT(false);
|
Q_ASSERT(false);
|
||||||
|
@ -113,7 +113,10 @@ public:
|
|||||||
bool isDir(const QModelIndex &index) const;
|
bool isDir(const QModelIndex &index) const;
|
||||||
qint64 size(const QModelIndex &index) const;
|
qint64 size(const QModelIndex &index) const;
|
||||||
QString type(const QModelIndex &index) const;
|
QString type(const QModelIndex &index) const;
|
||||||
|
|
||||||
|
// ### Qt7 merge the two overloads, with tz QTimeZone::LocalTime
|
||||||
QDateTime lastModified(const QModelIndex &index) const;
|
QDateTime lastModified(const QModelIndex &index) const;
|
||||||
|
QDateTime lastModified(const QModelIndex &index, const QTimeZone &tz) const;
|
||||||
|
|
||||||
QModelIndex mkdir(const QModelIndex &parent, const QString &name);
|
QModelIndex mkdir(const QModelIndex &parent, const QString &name);
|
||||||
bool rmdir(const QModelIndex &index);
|
bool rmdir(const QModelIndex &index);
|
||||||
|
@ -84,7 +84,7 @@ public:
|
|||||||
|
|
||||||
inline qint64 size() const { if (info && !info->isDir()) return info->size(); return 0; }
|
inline qint64 size() const { if (info && !info->isDir()) return info->size(); return 0; }
|
||||||
inline QString type() const { if (info) return info->displayType; return QLatin1StringView(""); }
|
inline QString type() const { if (info) return info->displayType; return QLatin1StringView(""); }
|
||||||
inline QDateTime lastModified() const { if (info) return info->lastModified(); return QDateTime(); }
|
inline QDateTime lastModified(const QTimeZone &tz) const { return info ? info->lastModified(tz) : QDateTime(); }
|
||||||
inline QFile::Permissions permissions() const { if (info) return info->permissions(); return { }; }
|
inline QFile::Permissions permissions() const { if (info) return info->permissions(); return { }; }
|
||||||
inline bool isReadable() const { return ((permissions() & QFile::ReadUser) != 0); }
|
inline bool isReadable() const { return ((permissions() & QFile::ReadUser) != 0); }
|
||||||
inline bool isWritable() const { return ((permissions() & QFile::WriteUser) != 0); }
|
inline bool isWritable() const { return ((permissions() & QFile::WriteUser) != 0); }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user