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 }