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"