File indexing completed on 2024-05-12 16:23:45
0001 // SPDX-FileCopyrightText: 2020 Jonah BrĂ¼chert <jbb@kaidan.im> 0002 // 0003 // SPDX-License-Identifier: GPL-2.0-or-later 0004 0005 #include "downloadsmodel.h" 0006 0007 #include <QDir> 0008 #include <QMimeDatabase> 0009 #include <QMimeType> 0010 #include <QUrl> 0011 0012 #include "downloadmanager.h" 0013 0014 #include <private/qquickwebenginedownloadrequest_p.h> 0015 using DownloadItem = QQuickWebEngineDownloadRequest; 0016 0017 DownloadsModel::DownloadsModel(QObject *parent) 0018 : QAbstractListModel(parent) 0019 { 0020 } 0021 0022 QVariant DownloadsModel::data(const QModelIndex &index, int role) const 0023 { 0024 const auto &downloads = DownloadManager::instance().downloads(); 0025 0026 switch (role) { 0027 case Role::FileNameRole: 0028 return downloads.at(index.row())->downloadFileName(); 0029 case Role::UrlRole: 0030 return downloads.at(index.row())->url(); 0031 case Role::DownloadRole: 0032 return QVariant::fromValue(downloads.at(index.row()).get()); 0033 case Role::MimeTypeIconRole: { 0034 static auto mimeDB = QMimeDatabase(); 0035 return mimeDB.mimeTypeForName(downloads.at(index.row())->mimeType()).iconName(); 0036 } 0037 case Role::DownloadedFilePathRole: { 0038 const auto &download = downloads.at(index.row()); 0039 return QUrl::fromLocalFile(download->downloadDirectory() + QDir::separator() + download->downloadFileName()); 0040 } 0041 } 0042 0043 return {}; 0044 } 0045 0046 int DownloadsModel::rowCount(const QModelIndex &parent) const 0047 { 0048 return parent.isValid() ? 0 : DownloadManager::instance().downloads().size(); 0049 } 0050 0051 QHash<int, QByteArray> DownloadsModel::roleNames() const 0052 { 0053 return { 0054 {UrlRole, "url"}, 0055 {FileNameRole, "fileName"}, 0056 {DownloadRole, "download"}, 0057 {MimeTypeIconRole, "mimeTypeIcon"}, 0058 {DownloadedFilePathRole, "downloadedFilePath"}, 0059 }; 0060 } 0061 0062 void DownloadsModel::removeDownload(const int index) 0063 { 0064 beginRemoveRows({}, index, index); 0065 DownloadManager::instance().removeDownload(index); 0066 endRemoveRows(); 0067 } 0068 0069 #include "moc_downloadsmodel.cpp"