Added 'eject' and 'ejectByNode' to mediamanager DCOP interface.

Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
pull/259/head
Michele Calgaro 3 years ago
parent cc236553af
commit 8d0f49aeb4
Signed by: MicheleC
GPG Key ID: 2A75B7CA8ADED5CF

@ -189,103 +189,103 @@ TQStringList MediaManager::properties(const TQString &name)
TQStringList MediaManager::mountoptions(const TQString &name) TQStringList MediaManager::mountoptions(const TQString &name)
{ {
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) if (m_tdebackend)
return TQStringList(); {
return m_tdebackend->mountoptions(name); return m_tdebackend->mountoptions(name);
#else }
return TQStringList();
#endif #endif
return TQStringList();
} }
bool MediaManager::setMountoptions(const TQString &name, const TQStringList &options) bool MediaManager::setMountoptions(const TQString &name, const TQStringList &options)
{ {
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) if (m_tdebackend)
return false; {
return m_tdebackend->setMountoptions(name, options); return m_tdebackend->setMountoptions(name, options);
#else }
return false;
#endif #endif
return false;
} }
TQStringVariantMap MediaManager::mount(const TQString &uid) TQStringVariantMap MediaManager::mount(const TQString &uid)
{ {
TQStringVariantMap result;
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) { if (m_tdebackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_tdebackend->mount(uid);
return result;
} }
return m_tdebackend->mount(uid);
#else #else
if (!m_fstabbackend) { if (m_fstabbackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_fstabbackend->mount(uid);
return result;
} }
return m_fstabbackend->mount(uid);
#endif #endif
TQStringVariantMap result;
result["errStr"] = i18n("Feature only available with the TDE or fstab hardware backend");
result["result"] = false;
return result;
} }
TQStringVariantMap MediaManager::unmount(const TQString &uid) TQStringVariantMap MediaManager::unmount(const TQString &uid)
{ {
TQStringVariantMap result;
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) { if (m_tdebackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_tdebackend->unmount(uid);
return result;
} }
return m_tdebackend->unmount(uid);
#else #else
if (!m_fstabbackend) { if (m_fstabbackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_fstabbackend->unmount(uid);
return result;
} }
return m_fstabbackend->unmount(uid);
#endif #endif
TQStringVariantMap result;
result["errStr"] = i18n("Feature only available with the TDE or fstab hardware backend");
result["result"] = false;
return result;
} }
TQStringVariantMap MediaManager::unlock(const TQString &uid, const TQString &password) TQStringVariantMap MediaManager::unlock(const TQString &uid, const TQString &password)
{ {
TQStringVariantMap result;
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) { if (m_tdebackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_tdebackend->unlock(uid, password);
return result;
} }
return m_tdebackend->unlock(uid, password);
#else
// if (!m_fstabbackend) {
result["errStr"] = i18n("Feature only available with the TDE hardware backend");
result["result"] = false;
return result;
// }
// return m_fstabbackend->unlock(uid, password);
#endif #endif
TQStringVariantMap result;
result["errStr"] = i18n("Feature only available with the TDE hardware backend");
result["result"] = false;
return result;
} }
TQStringVariantMap MediaManager::lock(const TQString &uid) TQStringVariantMap MediaManager::lock(const TQString &uid)
{ {
#ifdef COMPILE_TDEHARDWAREBACKEND
if (m_tdebackend)
{
return m_tdebackend->lock(uid);
}
#endif
TQStringVariantMap result; TQStringVariantMap result;
result["errStr"] = i18n("Feature only available with the TDE hardware backend");
result["result"] = false;
return result;
}
TQStringVariantMap MediaManager::eject(const TQString &uid)
{
#ifdef COMPILE_TDEHARDWAREBACKEND #ifdef COMPILE_TDEHARDWAREBACKEND
if (!m_tdebackend) { if (m_tdebackend)
result["errStr"] = i18n("Feature only available with the TDE hardware backend"); {
result["result"] = false; return m_tdebackend->eject(uid);
return result;
} }
return m_tdebackend->lock(uid);
#else
// if (!m_fstabbackend) {
result["errStr"] = i18n("Feature only available with the TDE hardware backend");
result["result"] = false;
return result;
// }
// return m_fstabbackend->lock(uid);
#endif #endif
TQStringVariantMap result;
result["errStr"] = i18n("Feature only available with the TDE hardware backend");
result["result"] = false;
return result;
} }
TQStringVariantMap MediaManager::mountByNode(const TQString &deviceNode) TQStringVariantMap MediaManager::mountByNode(const TQString &deviceNode)
@ -336,6 +336,18 @@ TQStringVariantMap MediaManager::lockByNode(const TQString &deviceNode)
return lock(medium->id()); return lock(medium->id());
} }
TQStringVariantMap MediaManager::ejectByNode(const TQString &deviceNode)
{
const Medium *medium = m_mediaList.findByNode(deviceNode);
if (!medium) {
TQStringVariantMap result;
result["errStr"] = i18n("No such medium: %1").arg(deviceNode);
result["result"] = false;
return result;
}
return eject(medium->id());
}
TQString MediaManager::mimeType(const TQString &name) TQString MediaManager::mimeType(const TQString &name)
{ {
const Medium *m = getMediumByName(name); const Medium *m = getMediumByName(name);

@ -52,11 +52,13 @@ k_dcop:
TQStringVariantMap unmount(const TQString &uid); TQStringVariantMap unmount(const TQString &uid);
TQStringVariantMap unlock(const TQString &uid, const TQString &password); TQStringVariantMap unlock(const TQString &uid, const TQString &password);
TQStringVariantMap lock(const TQString &uid); TQStringVariantMap lock(const TQString &uid);
TQStringVariantMap eject(const TQString &uid);
TQStringVariantMap mountByNode(const TQString &deviceNode); TQStringVariantMap mountByNode(const TQString &deviceNode);
TQStringVariantMap unmountByNode(const TQString &deviceNode); TQStringVariantMap unmountByNode(const TQString &deviceNode);
TQStringVariantMap unlockByNode(const TQString &deviceNode, const TQString &password); TQStringVariantMap unlockByNode(const TQString &deviceNode, const TQString &password);
TQStringVariantMap lockByNode(const TQString &deviceNode); TQStringVariantMap lockByNode(const TQString &deviceNode);
TQStringVariantMap ejectByNode(const TQString &deviceNode);
TQString mimeType(const TQString &name); TQString mimeType(const TQString &name);
TQString nameForLabel(const TQString &label); TQString nameForLabel(const TQString &label);

@ -1474,7 +1474,6 @@ TQStringVariantMap TDEBackend::unlock(const TQString &id, const TQString &passwo
} }
ResetProperties(sdevice, false, true); ResetProperties(sdevice, false, true);
result["result"] = unlockResult["unlockedDevice"];
result["result"] = true; result["result"] = true;
return result; return result;
} }
@ -1526,6 +1525,47 @@ TQStringVariantMap TDEBackend::lock(const TQString &id)
return result; return result;
} }
TQStringVariantMap TDEBackend::eject(const TQString &id)
{
kdDebug(1219) << "TDEBackend::eject for id " << id << endl;
TQStringVariantMap result;
const Medium *medium = m_mediaList.findById(id);
if (!medium)
{
result["errStr"] = i18n("No such medium: %1").arg(id);
result["result"] = false;
return result;
}
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();
TDEStorageDevice *sdevice = hwdevices->findDiskByUID(medium->id());
if (!sdevice)
{
result["errStr"] = i18n("Internal error. Couldn't find medium id %1.").arg(medium->id());
result["result"] = false;
return result;
}
TQStringVariantMap ejectResult = sdevice->ejectDrive();
if (ejectResult["result"].toBool() == false)
{
TQString qerror = i18n("<b>Unable to eject the device.</b>");
TQString errStr = ejectResult.contains("errStr") ? ejectResult["errStr"].toString() : TQString::null;
if (!errStr.isEmpty())
{
qerror.append(i18n("<p>Technical details:<br>").append(errStr));
result["errStr"] = qerror;
result["result"] = false;
return result;
}
}
result["result"] = true;
return result;
}
void TDEBackend::slotResult(TDEIO::Job *job) void TDEBackend::slotResult(TDEIO::Job *job)
{ {
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices();

@ -68,11 +68,12 @@ public:
bool setMountoptions(const TQString &id, const TQStringList &options); bool setMountoptions(const TQString &id, const TQStringList &options);
TQStringVariantMap mount(const TQString &id);
TQStringVariantMap mount(const Medium *medium); TQStringVariantMap mount(const Medium *medium);
TQStringVariantMap mount(const TQString &id);
TQStringVariantMap unmount(const TQString &id); TQStringVariantMap unmount(const TQString &id);
TQStringVariantMap unlock(const TQString &id, const TQString &password); TQStringVariantMap unlock(const TQString &id, const TQString &password);
TQStringVariantMap lock(const TQString &id); TQStringVariantMap lock(const TQString &id);
TQStringVariantMap eject(const TQString &uid);
private: private:
/** /**

@ -57,20 +57,6 @@ const Medium MountHelper::findMedium(const TQString &device)
void MountHelper::mount(const Medium &medium) void MountHelper::mount(const Medium &medium)
{ {
if (medium.id().isEmpty()) {
m_errorStr = i18n("Try to mount an unknown medium.");
errorAndExit();
}
TQString device = medium.deviceNode();
if (!medium.isMountable()) {
m_errorStr = i18n("%1 is not a mountable media.").arg(device);
errorAndExit();
}
else if (medium.isMounted()) {
m_errorStr = i18n("%1 is already mounted to %2.").arg(device).arg(medium.mountPoint());
errorAndExit();
}
DCOPReply reply = m_mediamanager.call("mount", medium.id()); DCOPReply reply = m_mediamanager.call("mount", medium.id());
TQStringVariantMap mountResult; TQStringVariantMap mountResult;
if (reply.isValid()) { if (reply.isValid()) {
@ -84,20 +70,6 @@ void MountHelper::mount(const Medium &medium)
void MountHelper::unmount(const Medium &medium) void MountHelper::unmount(const Medium &medium)
{ {
if (medium.id().isEmpty()) {
m_errorStr = i18n("Try to unmount an unknown medium.");
errorAndExit();
}
TQString device = medium.deviceNode();
if (!medium.isMountable()) {
m_errorStr = i18n("%1 is not a mountable media.").arg(device);
errorAndExit();
}
else if (!medium.isMounted()) {
m_errorStr = i18n("%1 is already unmounted.").arg(device);
errorAndExit();
}
DCOPReply reply = m_mediamanager.call("unmount", medium.id()); DCOPReply reply = m_mediamanager.call("unmount", medium.id());
TQStringVariantMap unmountResult; TQStringVariantMap unmountResult;
if (reply.isValid()) { if (reply.isValid()) {
@ -112,19 +84,9 @@ void MountHelper::unmount(const Medium &medium)
void MountHelper::unlock(const Medium &medium) void MountHelper::unlock(const Medium &medium)
{ {
if (medium.id().isEmpty()) {
m_errorStr = i18n("Try to unlock an unknown medium.");
errorAndExit();
}
TQString device = medium.deviceNode(); TQString device = medium.deviceNode();
if (!medium.isEncrypted()) if (device.isEmpty()) {
{ m_errorStr = i18n("Try to unlock an unknown medium.");
m_errorStr = i18n("%1 is not an encrypted media.").arg(device);
errorAndExit();
}
if (!medium.needUnlocking())
{
m_errorStr = i18n("%1 is already unlocked.").arg(device);
errorAndExit(); errorAndExit();
} }
@ -175,32 +137,29 @@ void MountHelper::lock(const Medium &medium)
} }
} }
void MountHelper::eject(const TQString &device, bool quiet) void MountHelper::eject(const Medium &medium)
{ {
#ifdef WITH_TDEHWLIB #ifdef WITH_TDEHWLIB
// Try TDE HW library eject first... DCOPReply reply = m_mediamanager.call("eject", medium.id());
TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); TQStringVariantMap ejectResult;
TDEGenericDevice *hwdevice = hwdevices->findByDeviceNode(device); if (reply.isValid()) {
if (hwdevice->type() == TDEGenericDeviceType::Disk) reply.get(ejectResult);
}
if (!ejectResult.contains("result") || !ejectResult["result"].toBool()) {
m_errorStr = ejectResult.contains("errStr") ? ejectResult["errStr"].toString() : i18n("Unknown eject error.");
kdDebug() << "medium eject " << m_errorStr << endl;
errorAndExit();
}
else
{ {
TDEStorageDevice *sdevice = static_cast<TDEStorageDevice*>(hwdevice); ::exit(0); // Success!
TQStringVariantMap ejectResult = sdevice->ejectDrive();
if (ejectResult["result"].toBool() == true)
{
// Success!
::exit(0);
}
} }
#endif #endif
// Otherwise fall back to tdeeject // Otherwise fall back to tdeeject
TDEProcess *proc = new TDEProcess(TQT_TQOBJECT(this)); TDEProcess *proc = new TDEProcess(TQT_TQOBJECT(this));
*proc << "tdeeject"; *proc << "tdeeject";
if (quiet) *proc << medium.deviceNode();
{
*proc << "-q";
}
*proc << device;
connect(proc, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(ejectFinished(TDEProcess*))); connect(proc, TQT_SIGNAL(processExited(TDEProcess*)), this, TQT_SLOT(ejectFinished(TDEProcess*)));
proc->start(); proc->start();
} }
@ -356,13 +315,13 @@ MountHelper::MountHelper() : TDEApplication(), m_mediamanager("kded", "mediamana
} }
else if (args->isSet("e")) else if (args->isSet("e"))
{ {
eject(device, true); eject(medium);
::exit(0); ::exit(0);
} }
else if (args->isSet("s")) else if (args->isSet("s"))
{ {
safeRemoval(medium); safeRemoval(medium);
eject(device, true); eject(medium);
::exit(0); ::exit(0);
} }
else if (args->isSet("f")) else if (args->isSet("f"))

@ -53,7 +53,7 @@ private:
void unmount(const Medium &medium); void unmount(const Medium &medium);
void unlock(const Medium &medium); void unlock(const Medium &medium);
void lock(const Medium &medium); void lock(const Medium &medium);
void eject(const TQString &device, bool quiet=false); void eject(const Medium &medium);
void safeRemoval(const Medium &medium); void safeRemoval(const Medium &medium);
void releaseHolders(const Medium &medium, bool handleThis = false); void releaseHolders(const Medium &medium, bool handleThis = false);
void openRealFolder(const Medium &medium); void openRealFolder(const Medium &medium);

Loading…
Cancel
Save