kio: sort metadata by name

better everyday (even on sundays):
https://ibb.co/MnGq4dx

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-05-27 15:23:48 +03:00
parent 01ebf503a2
commit 34f0c59d46
6 changed files with 52 additions and 47 deletions

View file

@ -111,7 +111,7 @@ void KFileMetaDataConfigurationWidget::Private::addItem(const KUrl& uri)
const QString label = (m_provider == 0)
? KFileMetaInfo::name(key)
: m_provider->label(uri);
: m_provider->label(key);
QListWidgetItem* item = new QListWidgetItem(label, m_metaDataList);
item->setData(Qt::UserRole, key);
@ -125,10 +125,8 @@ void KFileMetaDataConfigurationWidget::Private::slotLoadingFinished()
// the currently shown file item and add them to the list.
Q_ASSERT(m_provider != 0);
QHashIterator<KUrl, QString> it(m_provider->data());
while (it.hasNext()) {
it.next();
addItem(it.key());
foreach (const KFileMetaInfoItem &it, m_provider->data()) {
addItem(KUrl(it.key()));
}
}

View file

@ -52,24 +52,22 @@ void KFileMetaDataProvider::setItems(const KFileItemList& items)
if (item.isDir()) {
const int count = subDirectoriesCount(item.url().pathOrUrl());
if (count == -1) {
m_data.insert(KUrl("kfileitem#size"), QString("Unknown"));
m_data.append(KFileMetaInfoItem("kfileitem#size", QString::fromLatin1("Unknown")));
} else {
const QString itemCountString = i18ncp("@item:intable", "%1 item", "%1 items", count);
m_data.insert(KUrl("kfileitem#size"), itemCountString);
m_data.append(KFileMetaInfoItem("kfileitem#size", itemCountString));
}
} else {
const KFileMetaInfo metaInfo(item.url(), KFileMetaInfo::TechnicalInfo);
foreach (const KFileMetaInfoItem& metaInfoItem, metaInfo.items()) {
m_data.insert(metaInfoItem.key(), metaInfoItem.value());
}
m_data = metaInfo.items();
m_data.insert(KUrl("kfileitem#size"), KIO::convertSize(item.size()));
m_data.append(KFileMetaInfoItem("kfileitem#size", KIO::convertSize(item.size())));
}
m_data.insert(KUrl("kfileitem#type"), item.mimeComment());
m_data.insert(KUrl("kfileitem#modified"), KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate));
m_data.insert(KUrl("kfileitem#owner"), item.user());
m_data.insert(KUrl("kfileitem#permissions"), item.permissionsString());
m_data.insert(KUrl("kfileitem#mimetype"), item.mimetype());
m_data.append(KFileMetaInfoItem("kfileitem#type", item.mimeComment()));
m_data.append(KFileMetaInfoItem("kfileitem#modified", KGlobal::locale()->formatDateTime(item.time(KFileItem::ModificationTime), KLocale::FancyLongDate)));
m_data.append(KFileMetaInfoItem("kfileitem#owner", item.user()));
m_data.append(KFileMetaInfoItem("kfileitem#permissions", item.permissionsString()));
m_data.append(KFileMetaInfoItem("kfileitem#mimetype", item.mimetype()));
} else if (m_fileItems.count() > 1) {
// Calculate the size of all items
quint64 totalSize = 0;
@ -78,15 +76,17 @@ void KFileMetaDataProvider::setItems(const KFileItemList& items)
totalSize += item.size();
}
}
m_data.insert(KUrl("kfileitem#totalSize"), KIO::convertSize(totalSize));
m_data.append(KFileMetaInfoItem("kfileitem#totalSize", KIO::convertSize(totalSize)));
}
qSort(m_data);
emit loadingFinished();
}
QString KFileMetaDataProvider::label(const KUrl& metaDataUri) const
QString KFileMetaDataProvider::label(const QString& metaDataUri) const
{
return KFileMetaInfo::name(metaDataUri.prettyUrl());
return KFileMetaInfo::name(metaDataUri);
}
KFileItemList KFileMetaDataProvider::items() const
@ -94,12 +94,12 @@ KFileItemList KFileMetaDataProvider::items() const
return m_fileItems;
}
QHash<KUrl, QString> KFileMetaDataProvider::data() const
KFileMetaInfoItemList KFileMetaDataProvider::data() const
{
return m_data;
}
QWidget* KFileMetaDataProvider::createValueWidget(const KUrl& metaDataUri,
QWidget* KFileMetaDataProvider::createValueWidget(const QString& metaDataUri,
const QString& value,
QWidget* parent) const
{

View file

@ -20,7 +20,6 @@
#ifndef KFILEMETADATAMODEL_H
#define KFILEMETADATAMODEL_H
#include <kurl.h>
#include <kfileitem.h>
#include <QtCore/QHash>
@ -57,7 +56,7 @@ public:
* @return Translated string for the label of the meta data represented
* by \p metaDataUri.
*/
QString label(const KUrl& metaDataUri) const;
QString label(const QString& metaDataUri) const;
/**
* @return Meta data for the items that have been set by
@ -65,14 +64,14 @@ public:
* be invoked after the signal loadingFinished() has
* been received (otherwise no data will be returned).
*/
QHash<KUrl, QString> data() const;
KFileMetaInfoItemList data() const;
/**
* @return Factory method that returns a widget that should be used
* to show the meta data represented by \p metaDataUri. A
* QLabel will be returned.
*/
QWidget* createValueWidget(const KUrl& metaDataUri,
QWidget* createValueWidget(const QString& metaDataUri,
const QString& value,
QWidget* parent) const;
@ -95,7 +94,7 @@ private:
static int subDirectoriesCount(const QString &path);
QList<KFileItem> m_fileItems;
QHash<KUrl, QString> m_data;
KFileMetaInfoItemList m_data;
};
#endif // KFILEMETADATAMODEL_H

View file

@ -168,15 +168,14 @@ void KFileMetaDataWidget::Private::slotLoadingFinished()
m_gridLayout->setSpacing(q->fontMetrics().height() / 4);
}
QHash<KUrl, QString> data = m_provider->data();
KFileMetaInfoItemList data = m_provider->data();
// Remove all items, that are marked as hidden in kmetainformationrc
KConfig config("kmetainformationrc", KConfig::NoGlobals);
KConfigGroup settings = config.group("Show");
QHash<KUrl, QString>::iterator it = data.begin();
KFileMetaInfoItemList::iterator it = data.begin();
while (it != data.end()) {
const QString uriString = it.key().prettyUrl();
if (!settings.readEntry(uriString, true)) {
if (!settings.readEntry(it->key(), true)) {
it = data.erase(it);
} else {
++it;
@ -186,9 +185,9 @@ void KFileMetaDataWidget::Private::slotLoadingFinished()
// Iterate through all remaining items embed the label
// and the value as new row in the widget
int rowIndex = 0;
const QList<KUrl> keys = data.keys();
foreach (const KUrl& key, keys) {
const QString value = data.value(key);
foreach (const KFileMetaInfoItem& item, data) {
const QString key = item.key();
const QString value = item.value();
if (value.isEmpty()) {
continue;
}

View file

@ -25,8 +25,8 @@ KFileMetaInfoItem::KFileMetaInfoItem()
{
}
KFileMetaInfoItem::KFileMetaInfoItem(const KFileMetaInfoItem& item)
: d(item.d)
KFileMetaInfoItem::KFileMetaInfoItem(const KFileMetaInfoItem &other)
: d(other.d)
{
}
@ -42,10 +42,10 @@ KFileMetaInfoItem::~KFileMetaInfoItem()
{
}
const KFileMetaInfoItem& KFileMetaInfoItem::operator=(const KFileMetaInfoItem& item)
const KFileMetaInfoItem& KFileMetaInfoItem::operator=(const KFileMetaInfoItem& other)
{
d = item.d;
return item;
d = other.d;
return other;
}
const QString& KFileMetaInfoItem::key() const
@ -53,17 +53,22 @@ const QString& KFileMetaInfoItem::key() const
return d->key;
}
const QString& KFileMetaInfoItem::name() const
{
return d->name;
}
const QString& KFileMetaInfoItem::value() const
{
return d->value;
}
const QString& KFileMetaInfoItem::name() const
{
return d->name;
}
bool KFileMetaInfoItem::isValid() const
{
return (!d->key.isEmpty() && !d->value.isEmpty());
}
bool KFileMetaInfoItem::operator<(const KFileMetaInfoItem &other) const
{
return d->name < other.d->name;
}

View file

@ -38,7 +38,7 @@ public:
/**
* @brief Copy constructor
**/
KFileMetaInfoItem(const KFileMetaInfoItem& item);
KFileMetaInfoItem(const KFileMetaInfoItem& other);
/**
* @brief Constructor used by plugins
**/
@ -50,7 +50,7 @@ public:
/**
* @brief Copy operator
**/
const KFileMetaInfoItem& operator=(const KFileMetaInfoItem& item);
const KFileMetaInfoItem& operator=(const KFileMetaInfoItem& other);
/**
* @brief Retrieve the key of this item
**/
@ -59,14 +59,18 @@ public:
* @brief Retrieve the value of this item
**/
const QString& value() const;
/**
* @brief Returns localized name of the key
**/
const QString& name() const;
/**
* @brief Is this a valid item.
**/
bool isValid() const;
/**
* @brief Returns localized name of the key
* @brief Returns if item is less than other item
**/
const QString& name() const;
bool operator<(const KFileMetaInfoItem &other) const;
private:
QSharedDataPointer<KFileMetaInfoItemPrivate> d;
};