summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobias C. Berner <[email protected]>2017-06-16 20:00:45 +0200
committerTobias C. Berner <[email protected]>2017-07-18 18:57:47 +0200
commit286eaa7402346a364219bece7221c25e02228cba (patch)
treeebfb72ccc3309f8854310b545e918619d6d78873
parentec3da79560f5868b4dbdeb9741d453b4f66e8894 (diff)
Add role for file creation time.v17.07.80
Summary: At least on FreeBSD UFS and ZFS support birthtimes of files. Reviewers: #freebsd, #dolphin Subscribers: #konqueror Differential Revision: https://phabricator.kde.org/D6243 (cherry picked from commit d8061b4d9e04ec940ee33feae5f60f26bffc97b1)
-rw-r--r--src/kitemviews/kfileitemmodel.cpp25
-rw-r--r--src/kitemviews/kfileitemmodel.h2
2 files changed, 26 insertions, 1 deletions
diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp
index da64895..b725d95 100644
--- a/src/kitemviews/kfileitemmodel.cpp
+++ b/src/kitemviews/kfileitemmodel.cpp
@@ -334,6 +334,11 @@ QList<QPair<int, QVariant> > KFileItemModel::groups() const
return item->item.time(KFileItem::ModificationTime);
});
break;
+ case CreationTimeRole:
+ m_groups = timeRoleGroups([](const ItemData *item) {
+ return item->item.time(KFileItem::CreationTime);
+ });
+ break;
case AccessTimeRole:
m_groups = timeRoleGroups([](const ItemData *item) {
return item->item.time(KFileItem::AccessTime);
@@ -1562,6 +1567,14 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
data.insert(sharedValue("modificationtime"), dateTime);
}
+ if (m_requestRole[CreationTimeRole]) {
+ // Don't use KFileItem::timeString() as this is too expensive when
+ // having several thousands of items. Instead the formatting of the
+ // date-time will be done on-demand by the view when the date will be shown.
+ const QDateTime dateTime = item.time(KFileItem::CreationTime);
+ data.insert(sharedValue("creationtime"), dateTime);
+ }
+
if (m_requestRole[AccessTimeRole]) {
// Don't use KFileItem::timeString() as this is too expensive when
// having several thousands of items. Instead the formatting of the
@@ -1811,6 +1824,17 @@ int KFileItemModel::sortRoleCompare(const ItemData* a, const ItemData* b, const
break;
}
+ case CreationTimeRole: {
+ const QDateTime dateTimeA = itemA.time(KFileItem::CreationTime);
+ const QDateTime dateTimeB = itemB.time(KFileItem::CreationTime);
+ if (dateTimeA < dateTimeB) {
+ result = -1;
+ } else if (dateTimeA > dateTimeB) {
+ result = +1;
+ }
+ break;
+ }
+
case DeletionTimeRole: {
const QDateTime dateTimeA = a->values.value("deletiontime").toDateTime();
const QDateTime dateTimeB = b->values.value("deletiontime").toDateTime();
@@ -2271,6 +2295,7 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count)
{ "text", NameRole, I18N_NOOP2_NOSTRIP("@label", "Name"), 0, 0, false, false },
{ "size", SizeRole, I18N_NOOP2_NOSTRIP("@label", "Size"), 0, 0, false, false },
{ "modificationtime", ModificationTimeRole, I18N_NOOP2_NOSTRIP("@label", "Modified"), 0, 0, false, false },
+ { "creationtime", CreationTimeRole, I18N_NOOP2_NOSTRIP("@label", "Created"), 0, 0, false, false },
{ "accesstime", AccessTimeRole, I18N_NOOP2_NOSTRIP("@label", "Accessed"), 0, 0, false, false },
{ "type", TypeRole, I18N_NOOP2_NOSTRIP("@label", "Type"), 0, 0, false, false },
{ "rating", RatingRole, I18N_NOOP2_NOSTRIP("@label", "Rating"), 0, 0, true, false },
diff --git a/src/kitemviews/kfileitemmodel.h b/src/kitemviews/kfileitemmodel.h
index c73df90..ef90277 100644
--- a/src/kitemviews/kfileitemmodel.h
+++ b/src/kitemviews/kfileitemmodel.h
@@ -282,7 +282,7 @@ private slots:
private:
enum RoleType {
// User visible roles:
- NoRole, NameRole, SizeRole, ModificationTimeRole, AccessTimeRole, PermissionsRole, OwnerRole,
+ NoRole, NameRole, SizeRole, ModificationTimeRole, CreationTimeRole, AccessTimeRole, PermissionsRole, OwnerRole,
GroupRole, TypeRole, DestinationRole, PathRole, DeletionTimeRole,
// User visible roles available with Baloo:
CommentRole, TagsRole, RatingRole, ImageSizeRole, OrientationRole,