/************************************************************************** * Copyright 2009 by Jacopo De Simoi * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . * ***************************************************************************/ //own #include "devicewrapper.h" //Qt #include #include #include #include //Solid #include #include #include #include #include //KDE #include #include #include #include //Plasma #include DeviceWrapper::DeviceWrapper(const QString& udi) : m_device(udi), m_isStorageAccess(false), m_isAccessible(false), m_isEncryptedContainer(false) { m_udi = m_device.udi(); } DeviceWrapper::~DeviceWrapper() { } void DeviceWrapper::dataUpdated(const QString &source, Plasma::DataEngine::Data data) { Q_UNUSED(source) if (data.isEmpty()) { return; } if (data["text"].isValid()) { m_actionIds.clear(); foreach (const QString &desktop, data["predicateFiles"].toStringList()) { QString filePath = KStandardDirs::locate("data", "solid/actions/" + desktop); QList services = KDesktopFileActions::userDefinedServices(filePath, true); foreach (KServiceAction serviceAction, services) { QString actionId = id()+'_'+desktop+'_'+serviceAction.name(); m_actionIds << actionId; emit registerAction(actionId, serviceAction.icon(), serviceAction.text(), desktop); } } m_isEncryptedContainer = data["isEncryptedContainer"].toBool(); } else { if (data["Device Types"].toStringList().contains("Storage Access")) { m_isStorageAccess = true; if (data["Accessible"].toBool() == true) { m_isAccessible = true; } else { m_isAccessible = false; } } else { m_isStorageAccess = false; } if (data["Device Types"].toStringList().contains("OpticalDisc")) { m_isOpticalDisc = true; } else { m_isOpticalDisc = false; } } m_emblems = m_device.emblems(); m_description = m_device.description(); m_iconName = m_device.icon(); emit refreshMatch(m_udi); } QString DeviceWrapper::id() const { return m_udi; } Solid::Device DeviceWrapper::device() const { return m_device; } KIcon DeviceWrapper::icon() const { return KIcon(m_iconName, NULL, m_emblems); } bool DeviceWrapper::isStorageAccess() const { return m_isStorageAccess; } bool DeviceWrapper::isAccessible() const { return m_isAccessible; } bool DeviceWrapper::isEncryptedContainer() const { return m_isEncryptedContainer; } bool DeviceWrapper::isOpticalDisc() const { return m_isOpticalDisc; } QString DeviceWrapper::description() const { return m_description; } void DeviceWrapper::setForceEject(bool force) { m_forceEject = force; } QString DeviceWrapper::defaultAction() const { QString actionString; if (m_isOpticalDisc && m_forceEject) { actionString = i18n("Eject medium"); } else if (m_isStorageAccess) { if (!m_isEncryptedContainer) { if (!m_isAccessible) { actionString = i18n("Mount the device"); } else { actionString = i18n("Unmount the device"); } } else { if (!m_isAccessible) { actionString = i18nc("Unlock the encrypted container; will ask for a password; partitions inside will appear as they had been plugged in","Unlock the container"); } else { actionString = i18nc("Close the encrypted container; partitions inside will disappear as they had been unplugged", "Lock the container"); } } } else { actionString = i18n("Eject medium"); } return actionString; } void DeviceWrapper::runAction(QAction * action) { if (action) { QString desktopAction = action->data().toString(); if (!desktopAction.isEmpty()) { QStringList desktopFiles; desktopFiles.append(desktopAction); QDBusInterface soliduiserver("org.kde.kded", "/modules/soliduiserver", "org.kde.SolidUiServer"); soliduiserver.asyncCall("showActionsDialog", id(), desktopFiles); } } else { if (isOpticalDisc() && m_forceEject) { Solid::OpticalDrive *drive = m_device.as(); if (drive) { drive->eject(); } return; } if (m_device.is()) { Solid::StorageAccess *access = m_device.as(); if (access) { if (access->isAccessible()) { access->teardown(); } else { access->setup(); } return; } } if (isOpticalDisc()) { Solid::OpticalDrive *drive = m_device.as(); if (drive) { drive->eject(); } } } } QStringList DeviceWrapper::actionIds() const { return m_actionIds; } #include "moc_devicewrapper.cpp"