File indexing completed on 2024-05-12 05:50:08

0001 /*
0002     SPDX-FileCopyrightText: 2022 Jiří Wolker <woljiri@gmail.com>
0003     SPDX-FileCopyrightText: 2022 Eugene Popov <popov895@ukr.net>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "recentfilesmodel.h"
0009 
0010 #include <QFileInfo>
0011 #include <QMimeDatabase>
0012 
0013 RecentFilesModel::RecentFilesModel(QObject *parent)
0014     : QAbstractListModel(parent)
0015 {
0016 }
0017 
0018 QVariant RecentFilesModel::data(const QModelIndex &index, int role) const
0019 {
0020     if (index.isValid()) {
0021         const int row = index.row();
0022         if (row >= 0 && row < m_recentFiles.count()) {
0023             const RecentFileInfo &recentFile = m_recentFiles.at(row);
0024             switch (role) {
0025             case Qt::DisplayRole:
0026                 return recentFile.name;
0027             case Qt::DecorationRole:
0028                 return recentFile.icon;
0029             case Qt::ToolTipRole:
0030                 return recentFile.url.toString(QUrl::PreferLocalFile);
0031             default:
0032                 break;
0033             }
0034         }
0035     }
0036 
0037     return QVariant();
0038 }
0039 
0040 int RecentFilesModel::rowCount(const QModelIndex &parent) const
0041 {
0042     Q_UNUSED(parent);
0043 
0044     return m_recentFiles.count();
0045 }
0046 
0047 void RecentFilesModel::refresh(const QList<QUrl> &urls)
0048 {
0049     QVector<RecentFileInfo> recentFiles;
0050     recentFiles.reserve(urls.count());
0051 
0052     QIcon icon;
0053     QString name;
0054     for (const QUrl &url : urls) {
0055         if (url.isLocalFile()) {
0056             const QFileInfo fileInfo(url.toLocalFile());
0057             icon = QIcon::fromTheme(QMimeDatabase().mimeTypeForFile(fileInfo).iconName());
0058             name = fileInfo.fileName();
0059         } else {
0060             icon = QIcon::fromTheme(QStringLiteral("network-server"));
0061             name = url.toString();
0062         }
0063 
0064         recentFiles.append({icon, name, url});
0065     }
0066 
0067     beginResetModel();
0068     m_recentFiles = std::move(recentFiles);
0069     endResetModel();
0070 }
0071 
0072 QUrl RecentFilesModel::url(const QModelIndex &index) const
0073 {
0074     if (index.isValid()) {
0075         const int row = index.row();
0076         if (row >= 0 && row < m_recentFiles.count()) {
0077             return m_recentFiles.at(row).url;
0078         }
0079     }
0080 
0081     return QUrl();
0082 }
0083 
0084 #include "moc_recentfilesmodel.cpp"