File indexing completed on 2024-04-28 15:52:01
0001 /* 0002 SPDX-FileCopyrightText: 2021 Jiří Wolker <woljiri@gmail.com> 0003 0004 SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "recentitemsmodel.h" 0008 0009 #include <QFile> 0010 #include <QFileIconProvider> 0011 #include <QFileInfo> 0012 #include <QIcon> 0013 0014 #include <KConfigGroup> 0015 0016 RecentItemsModel::RecentItemsModel() 0017 { 0018 } 0019 0020 RecentItemsModel::~RecentItemsModel() 0021 { 0022 } 0023 0024 void RecentItemsModel::loadEntries(const KConfigGroup &cg) 0025 { 0026 clearEntries(); 0027 0028 // Based on implementation of KRecentFilesAction::loadEntries. 0029 0030 // read file list 0031 for (int i = 1; i <= maxItems(); i++) { 0032 const QString key = QStringLiteral("File%1").arg(i); 0033 const QString value = cg.readPathEntry(key, QString()); 0034 if (value.isEmpty()) { 0035 continue; 0036 } 0037 const QUrl url = QUrl::fromUserInput(value); 0038 0039 // Don't restore if file doesn't exist anymore 0040 if (url.isLocalFile() && !QFile::exists(url.toLocalFile())) { 0041 continue; 0042 } 0043 0044 const QString nameKey = QStringLiteral("Name%1").arg(i); 0045 const QString nameValue = cg.readPathEntry(nameKey, url.fileName()); 0046 m_recentItems.append(RecentItem {nameValue, url}); 0047 } 0048 0049 Q_EMIT layoutChanged(); 0050 } 0051 0052 void RecentItemsModel::clearEntries() 0053 { 0054 m_recentItems.clear(); 0055 0056 Q_EMIT layoutChanged(); 0057 } 0058 0059 int RecentItemsModel::rowCount(const QModelIndex &parent) const 0060 { 0061 Q_UNUSED(parent); 0062 0063 return m_recentItems.size(); 0064 } 0065 0066 QVariant RecentItemsModel::data(const QModelIndex &index, int role) const 0067 { 0068 const RecentItemsModel::RecentItem *item = getItem(index); 0069 0070 if (item != nullptr) { 0071 switch (role) { 0072 case Qt::ItemDataRole::DisplayRole: 0073 if (item->name.isEmpty()) { 0074 if (item->url.isLocalFile()) { 0075 return item->url.toLocalFile(); 0076 } else { 0077 return item->url.toString(); 0078 } 0079 } else { 0080 return item->name; 0081 } 0082 0083 case Qt::ItemDataRole::ToolTipRole: 0084 if (item->url.isLocalFile()) { 0085 return item->url.toLocalFile(); 0086 } else { 0087 return item->url.toString(); 0088 } 0089 0090 case Qt::ItemDataRole::DecorationRole: 0091 if (item->url.isLocalFile()) { 0092 return m_iconProvider.icon(QFileInfo(item->url.toLocalFile())); 0093 } else { 0094 // Fallback icon for remote files. 0095 return QIcon::fromTheme(QStringLiteral("network-server")); 0096 } 0097 0098 default: 0099 return QVariant(); 0100 } 0101 } else { 0102 return QVariant(); 0103 } 0104 } 0105 0106 RecentItemsModel::RecentItem const *RecentItemsModel::getItem(int index) const 0107 { 0108 if (m_recentItems.size() > index && index >= 0) { 0109 // We reverse the order of items. 0110 return &m_recentItems[m_recentItems.size() - index - 1]; 0111 } else { 0112 return nullptr; 0113 } 0114 } 0115 0116 RecentItemsModel::RecentItem const *RecentItemsModel::getItem(const QModelIndex &index) const 0117 { 0118 return getItem(index.row()); 0119 }