File indexing completed on 2024-05-12 04:46:02

0001 /*
0002  * SPDX-FileCopyrightText: 2015 Ashish Bansal <bansal.ashish096@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #include "dbusinterface.h"
0008 #include "global.h"
0009 #include "dolphin_generalsettings.h"
0010 
0011 #include <KPropertiesDialog>
0012 #include <KWindowSystem>
0013 
0014 #include <QApplication>
0015 #include <QDBusConnection>
0016 #include <QDBusInterface>
0017 #include <QDBusConnectionInterface>
0018 
0019 DBusInterface::DBusInterface() :
0020     QObject()
0021 {
0022     QDBusConnection::sessionBus().registerObject(QStringLiteral("/org/freedesktop/FileManager1"), this,
0023             QDBusConnection::ExportScriptableContents | QDBusConnection::ExportAdaptors);
0024     QDBusConnectionInterface *sessionInterface = QDBusConnection::sessionBus().interface();
0025     if (sessionInterface) {
0026         sessionInterface->registerService(QStringLiteral("org.freedesktop.FileManager1"), QDBusConnectionInterface::QueueService);
0027     }
0028 }
0029 
0030 void DBusInterface::ShowFolders(const QStringList& uriList, const QString& startUpId)
0031 {
0032     const QList<QUrl> urls = Dolphin::validateUris(uriList);
0033     if (urls.isEmpty()) {
0034         return;
0035     }
0036     KWindowSystem::setCurrentXdgActivationToken(startUpId);
0037     const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid());
0038     if(!Dolphin::attachToExistingInstance(urls, false, GeneralSettings::splitView(), serviceName)) {
0039         Dolphin::openNewWindow(urls);
0040     }
0041 }
0042 
0043 void DBusInterface::ShowItems(const QStringList& uriList, const QString& startUpId)
0044 {
0045     const QList<QUrl> urls = Dolphin::validateUris(uriList);
0046     if (urls.isEmpty()) {
0047         return;
0048     }
0049     KWindowSystem::setCurrentXdgActivationToken(startUpId);
0050     const auto serviceName = isDaemon() ? QString() : QStringLiteral("org.kde.dolphin-%1").arg(QCoreApplication::applicationPid());
0051     if(!Dolphin::attachToExistingInstance(urls, true, GeneralSettings::splitView(), serviceName)) {
0052         Dolphin::openNewWindow(urls, nullptr, Dolphin::OpenNewWindowFlag::Select);
0053     };
0054 }
0055 
0056 void DBusInterface::ShowItemProperties(const QStringList& uriList, const QString& startUpId)
0057 {
0058     const QList<QUrl> urls = Dolphin::validateUris(uriList);
0059     if (!urls.isEmpty()) {
0060         KWindowSystem::setCurrentXdgActivationToken(startUpId);
0061         KPropertiesDialog::showDialog(urls);
0062     }
0063 }
0064 
0065 void DBusInterface::SortOrderForUrl(const QString &url, QString &role, QString &order)
0066 {
0067     QUrl qurl(url);
0068     auto sort = Dolphin::sortOrderForUrl(qurl);
0069     role = sort.first;
0070     if (sort.second == Qt::AscendingOrder) {
0071         order = QStringLiteral("ascending");
0072     } else {
0073         order = QStringLiteral("descending");
0074     }
0075 }
0076 
0077 void DBusInterface::setAsDaemon()
0078 {
0079     m_isDaemon = true;
0080 }
0081 
0082 bool DBusInterface::isDaemon() const
0083 {
0084     return m_isDaemon;
0085 }