mirror of
https://bitbucket.org/smil3y/kde-workspace.git
synced 2025-02-24 19:02:51 +00:00
210 lines
6.4 KiB
C++
210 lines
6.4 KiB
C++
/**************************************************************************
|
|
* Copyright 2009 by Jacopo De Simoi <wilderkde@gmail.com> *
|
|
* 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 <QAction>
|
|
#include <QTimer>
|
|
#include <QtDBus/QDBusInterface>
|
|
#include <QtDBus/QDBusReply>
|
|
|
|
//Solid
|
|
#include <Solid/Device>
|
|
#include <Solid/StorageVolume>
|
|
#include <Solid/StorageAccess>
|
|
#include <Solid/OpticalDrive>
|
|
#include <Solid/OpticalDisc>
|
|
|
|
//KDE
|
|
#include <KIcon>
|
|
#include <KMessageBox>
|
|
#include <KStandardDirs>
|
|
#include <kdesktopfileactions.h>
|
|
|
|
//Plasma
|
|
#include <Plasma/DataEngine>
|
|
|
|
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<KServiceAction> 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.parent().as<Solid::OpticalDrive>();
|
|
if (drive) {
|
|
drive->eject();
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (m_device.is<Solid::StorageVolume>()) {
|
|
Solid::StorageAccess *access = m_device.as<Solid::StorageAccess>();
|
|
if (access) {
|
|
if (access->isAccessible()) {
|
|
access->teardown();
|
|
} else {
|
|
access->setup();
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (isOpticalDisc()) {
|
|
Solid::OpticalDrive *drive = m_device.parent().as<Solid::OpticalDrive>();
|
|
if (drive) {
|
|
drive->eject();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
QStringList DeviceWrapper::actionIds() const
|
|
{
|
|
return m_actionIds;
|
|
}
|
|
|
|
#include "moc_devicewrapper.cpp"
|