File indexing completed on 2024-06-09 05:30:57

0001 /*
0002     SPDX-FileCopyrightText: 2015 Eike Hein <hein@kde.org>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "fileentry.h"
0008 #include "actionlist.h"
0009 
0010 #include <QApplication>
0011 
0012 #include <KFileItem>
0013 #include <KIO/JobUiDelegate>
0014 #include <KIO/JobUiDelegateFactory>
0015 #include <KIO/OpenUrlJob>
0016 
0017 FileEntry::FileEntry(AbstractModel *owner, const QUrl &url, const QString &mimeType)
0018     : AbstractEntry(owner)
0019     , m_fileItem(nullptr)
0020 {
0021     if (url.isValid()) {
0022         m_fileItem = new KFileItem(url, mimeType);
0023         m_fileItem->determineMimeType();
0024     }
0025 }
0026 
0027 FileEntry::~FileEntry()
0028 {
0029     delete m_fileItem;
0030 }
0031 
0032 bool FileEntry::isValid() const
0033 {
0034     return m_fileItem;
0035 }
0036 
0037 QString FileEntry::icon() const
0038 {
0039     if (m_fileItem) {
0040         return m_fileItem->iconName();
0041     }
0042 
0043     return QStringLiteral("unknown");
0044 }
0045 
0046 QString FileEntry::name() const
0047 {
0048     if (m_fileItem) {
0049         return m_fileItem->text();
0050     }
0051 
0052     return QString();
0053 }
0054 
0055 QString FileEntry::description() const
0056 {
0057     if (m_fileItem) {
0058         return m_fileItem->url().toString(QUrl::PreferLocalFile);
0059     }
0060 
0061     return QString();
0062 }
0063 
0064 QString FileEntry::id() const
0065 {
0066     if (m_fileItem) {
0067         return m_fileItem->url().toString();
0068     }
0069 
0070     return QString();
0071 }
0072 
0073 QUrl FileEntry::url() const
0074 {
0075     if (m_fileItem) {
0076         return m_fileItem->url();
0077     }
0078 
0079     return QUrl();
0080 }
0081 
0082 bool FileEntry::hasActions() const
0083 {
0084     return m_fileItem && m_fileItem->isFile();
0085 }
0086 
0087 QVariantList FileEntry::actions() const
0088 {
0089     if (m_fileItem) {
0090         return Kicker::createActionListForFileItem(*m_fileItem);
0091     }
0092 
0093     return QVariantList();
0094 }
0095 
0096 bool FileEntry::run(const QString &actionId, const QVariant &argument)
0097 {
0098     if (!m_fileItem) {
0099         return false;
0100     }
0101 
0102     if (actionId.isEmpty()) {
0103         auto job = new KIO::OpenUrlJob(m_fileItem->url());
0104         job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, QApplication::activeWindow()));
0105         job->setShowOpenOrExecuteDialog(true);
0106         job->start();
0107 
0108         return true;
0109     } else {
0110         bool close = false;
0111 
0112         if (Kicker::handleFileItemAction(*m_fileItem, actionId, argument, &close)) {
0113             return close;
0114         }
0115     }
0116 
0117     return false;
0118 }