]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/kitemviews/kfileitemlistwidget.cpp
Merge branch 'release/20.12'
[dolphin.git] / src / kitemviews / kfileitemlistwidget.cpp
index 69a40ddf3641d8626e498c504fc7ea334fbcae37..1b38176cc29c95fbc245e8268e9c1ca1a1f92be0 100644 (file)
@@ -47,41 +47,50 @@ QString KFileItemListWidgetInformant::roleText(const QByteArray& role,
 {
     QString text;
     const QVariant roleValue = values.value(role);
+    QLocale local;
+    KFormat formatter(local);
 
     // Implementation note: In case if more roles require a custom handling
     // use a hash + switch for a linear runtime.
 
+    auto formatDate = [formatter, local](const QDateTime& time) {
+        if (DetailsModeSettings::useShortRelativeDates()) {
+            return formatter.formatRelativeDateTime(time, QLocale::ShortFormat);
+        } else {
+            return local.toString(time, QLocale::ShortFormat);
+        }
+    };
+
     if (role == "size") {
         if (values.value("isDir").toBool()) {
-            // The item represents a directory.
-            if (!roleValue.isNull()) {
-                const int count = values.value("count").toInt();
-                if (count > 0) {
-                    if (DetailsModeSettings::directorySizeCount()) {
-                        //  Show the number of sub directories instead of the file size of the directory.
-                        text = i18ncp("@item:intable", "%1 item", "%1 items", count);
-                    } else {
-                        // if we have directory size available
-                        if (roleValue != -1) {
-                            const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
-                            text = KFormat().formatByteSize(size);
-                        }
-                    }
+            if (!roleValue.isNull() && roleValue != -1) {
+                // The item represents a directory.
+                if (DetailsModeSettings::directorySizeCount()) {
+                    //  Show the number of sub directories instead of the file size of the directory.
+                    const int count = values.value("count").toInt();
+                    text = i18ncp("@item:intable", "%1 item", "%1 items", count);
+                } else {
+                    // if we have directory size available
+                    const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
+                    text = formatter.formatByteSize(size);
                 }
             }
         } else {
             const KIO::filesize_t size = roleValue.value<KIO::filesize_t>();
-            text = KFormat().formatByteSize(size);
+            text = formatter.formatByteSize(size);
         }
     } else if (role == "modificationtime" || role == "creationtime" || role == "accesstime") {
             bool ok;
             const long long time = roleValue.toLongLong(&ok);
             if (ok && time != -1) {
-                return QLocale().toString(QDateTime::fromSecsSinceEpoch(time), QLocale::ShortFormat);
+                const QDateTime dateTime = QDateTime::fromSecsSinceEpoch(time);
+                text = formatDate(dateTime);
             }
     } else if (role == "deletiontime" || role == "imageDateTime") {
         const QDateTime dateTime = roleValue.toDateTime();
-        text = QLocale().toString(dateTime, QLocale::ShortFormat);
+        if (dateTime.isValid()) {
+            text = formatDate(dateTime);
+        }
     } else {
         text = KStandardItemListWidgetInformant::roleText(role, values);
     }