diff options
Diffstat (limited to 'tdecore/tdehw/tdehardwaredevices.cpp')
-rw-r--r-- | tdecore/tdehw/tdehardwaredevices.cpp | 975 |
1 files changed, 3 insertions, 972 deletions
diff --git a/tdecore/tdehw/tdehardwaredevices.cpp b/tdecore/tdehw/tdehardwaredevices.cpp index 69e7856cb..aaba9e4ed 100644 --- a/tdecore/tdehw/tdehardwaredevices.cpp +++ b/tdecore/tdehw/tdehardwaredevices.cpp @@ -36,11 +36,6 @@ #include <libudev.h> #include <fcntl.h> -#include <poll.h> -#include <sys/stat.h> -#include <sys/ioctl.h> -#include <linux/fs.h> -#include <linux/cdrom.h> // Backlight devices #include <linux/fb.h> @@ -67,22 +62,14 @@ #include "networkbackends/network-manager/network-manager.h" #endif // WITH_NETWORK_MANAGER_BACKEND -// uPower and uDisks2 integration -#if defined(WITH_UPOWER) || defined(WITH_UDISKS) || defined(WITH_UDISKS2) +// uPower +#if defined(WITH_UPOWER) || defined(WITH_CONSOLEKIT) #include <tqdbusdata.h> #include <tqdbusmessage.h> #include <tqdbusproxy.h> #include <tqdbusvariant.h> #include <tqdbusconnection.h> -#endif // defined(WITH_UPOWER) || defined(WITH_UDISKS) || defined(WITH_UDISKS2) -#if defined(WITH_UDISKS) || defined(WITH_UDISKS2) - #include <tqdbuserror.h> - #include <tqdbusdatamap.h> - #include <tqdbusobjectpath.h> -#endif // defined(WITH_UDISKS) || defined(WITH_UDISKS2) -#if defined(WITH_UDISKS) - #include "tqdbusdatalist.h" -#endif // ddefined(WITH_UDISKS) +#endif // defined(WITH_UPOWER) // BEGIN BLOCK // Copied from include/linux/genhd.h @@ -122,962 +109,6 @@ TDESensorCluster::TDESensorCluster() { critical = -1; } -TDEGenericDevice::TDEGenericDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TQObject() { - m_deviceType = dt; - m_deviceName = dn; - - m_parentDevice = 0; - m_friendlyName = TQString::null; - m_blacklistedForUpdate = false; -} - -TDEGenericDevice::~TDEGenericDevice() { -} - -TDEGenericDeviceType::TDEGenericDeviceType TDEGenericDevice::type() { - return m_deviceType; -} - -TQString TDEGenericDevice::name() { - return m_deviceName; -} - -void TDEGenericDevice::internalSetName(TQString dn) { - m_deviceName = dn; -} - -TQString TDEGenericDevice::vendorName() { - return m_vendorName; -} - -void TDEGenericDevice::internalSetVendorName(TQString vn) { - m_vendorName = vn; -} - -TQString TDEGenericDevice::vendorModel() { - return m_vendorModel; -} - -void TDEGenericDevice::internalSetVendorModel(TQString vm) { - m_vendorModel = vm; -} - -TQString TDEGenericDevice::serialNumber() { - return m_serialNumber; -} - -void TDEGenericDevice::internalSetSerialNumber(TQString sn) { - m_serialNumber = sn; -} - -TQString TDEGenericDevice::systemPath() { - if (!m_systemPath.endsWith("/")) { - m_systemPath += "/"; - } - return m_systemPath; -} - -void TDEGenericDevice::internalSetSystemPath(TQString sp) { - m_systemPath = sp; -} - -TQString TDEGenericDevice::deviceNode() { - return m_deviceNode; -} - -void TDEGenericDevice::internalSetDeviceNode(TQString sn) { - m_deviceNode = sn; -} - -TQString TDEGenericDevice::deviceBus() { - return m_deviceBus; -} - -void TDEGenericDevice::internalSetDeviceBus(TQString db) { - m_deviceBus = db; -} - -TQString TDEGenericDevice::uniqueID() { - m_uniqueID = m_systemPath+m_deviceNode; - return m_uniqueID; -} - -TQString TDEGenericDevice::vendorID() { - return m_vendorID; -} - -void TDEGenericDevice::internalSetVendorID(TQString id) { - m_vendorID = id; - m_vendorID.replace("0x", ""); -} - -TQString TDEGenericDevice::modelID() { - return m_modelID; -} - -void TDEGenericDevice::internalSetModelID(TQString id) { - m_modelID = id; - m_modelID.replace("0x", ""); -} - -TQString TDEGenericDevice::vendorEncoded() { - return m_vendorenc; -} - -void TDEGenericDevice::internalSetVendorEncoded(TQString id) { - m_vendorenc = id; -} - -TQString TDEGenericDevice::modelEncoded() { - return m_modelenc; -} - -void TDEGenericDevice::internalSetModelEncoded(TQString id) { - m_modelenc = id; -} - -TQString TDEGenericDevice::subVendorID() { - return m_subvendorID; -} - -void TDEGenericDevice::internalSetSubVendorID(TQString id) { - m_subvendorID = id; - m_subvendorID.replace("0x", ""); -} - -TQString TDEGenericDevice::PCIClass() { - return m_pciClass; -} - -void TDEGenericDevice::internalSetPCIClass(TQString cl) { - m_pciClass = cl; - m_pciClass.replace("0x", ""); -} - -TQString TDEGenericDevice::moduleAlias() { - return m_modAlias; -} - -void TDEGenericDevice::internalSetModuleAlias(TQString ma) { - m_modAlias = ma; -} - -TQString TDEGenericDevice::deviceDriver() { - return m_deviceDriver; -} - -void TDEGenericDevice::internalSetDeviceDriver(TQString dr) { - m_deviceDriver = dr; -} - -TQString TDEGenericDevice::subsystem() { - return m_subsystem; -} - -void TDEGenericDevice::internalSetSubsystem(TQString ss) { - m_subsystem = ss; -} - -TQString TDEGenericDevice::subModelID() { - return m_submodelID; -} - -void TDEGenericDevice::internalSetSubModelID(TQString id) { - m_submodelID = id; - m_submodelID.replace("0x", ""); -} - -void TDEGenericDevice::internalSetParentDevice(TDEGenericDevice* pd) { - m_parentDevice = pd; -} - -TDEGenericDevice* TDEGenericDevice::parentDevice() { - return m_parentDevice; -} - -TQPixmap TDEGenericDevice::icon(TDEIcon::StdSizes size) { - return TDEGlobal::hardwareDevices()->getDeviceTypeIconFromType(type(), size); -} - -bool TDEGenericDevice::blacklistedForUpdate() { - return m_blacklistedForUpdate; -} - -void TDEGenericDevice::internalSetBlacklistedForUpdate(bool bl) { - m_blacklistedForUpdate = bl; -} - -TQString TDEGenericDevice::friendlyDeviceType() { - return TDEGlobal::hardwareDevices()->getFriendlyDeviceTypeStringFromType(type()); -} - -TQString TDEGenericDevice::busID() { - TQString busid = m_systemPath; - busid = busid.remove(0, busid.findRev("/")+1); - busid = busid.remove(0, busid.find(":")+1); - return busid; -} - -TQString TDEGenericDevice::friendlyName() { - if (m_friendlyName.isNull()) { - if (type() == TDEGenericDeviceType::RootSystem) { - m_friendlyName = "Linux System"; - } - else if (type() == TDEGenericDeviceType::Root) { - TQString friendlyDriverName = systemPath(); - friendlyDriverName.truncate(friendlyDriverName.length()-1); - friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1); - m_friendlyName = friendlyDriverName; - } - else if (m_modAlias.lower().startsWith("pci")) { - m_friendlyName = TDEGlobal::hardwareDevices()->findPCIDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID); - } - else if (m_modAlias.lower().startsWith("usb")) { - m_friendlyName = TDEGlobal::hardwareDevices()->findUSBDeviceName(m_vendorID, m_modelID, m_subvendorID, m_submodelID); - } - else { - TQString acpigentype = systemPath(); - acpigentype.truncate(acpigentype.length()-1); - acpigentype.remove(0, acpigentype.findRev("/")+1); - TQString pnpgentype = acpigentype; - pnpgentype.truncate(pnpgentype.find(":")); - if (pnpgentype.startsWith("PNP")) { - m_friendlyName = TDEGlobal::hardwareDevices()->findPNPDeviceName(pnpgentype); - } - else if (acpigentype.startsWith("device:")) { - acpigentype.remove(0, acpigentype.findRev(":")+1); - acpigentype.prepend("0x"); - m_friendlyName = i18n("ACPI Node %1").arg(acpigentype.toUInt(0,0)); - } - } - } - - if (m_friendlyName.isNull()) { - // Could not identify based on model/vendor codes - // Try to construct something from the model/vendor strings if they are available - if (!m_vendorName.isNull() && !m_vendorModel.isNull()) { - m_friendlyName = m_vendorName + " " + m_vendorModel; - } - } - - if (m_friendlyName.isNull()) { - // Could not identify based on model/vendor - // Guess by type - if (type() == TDEGenericDeviceType::CPU) { - m_friendlyName = name(); - } - else if (type() == TDEGenericDeviceType::Event) { - // Use parent node name - if (m_parentDevice) { - return m_parentDevice->friendlyName(); - } - else { - m_friendlyName = i18n("Generic Event Device"); - } - } - else if (type() == TDEGenericDeviceType::Input) { - // Use parent node name - if (m_parentDevice) { - return m_parentDevice->friendlyName(); - } - else { - m_friendlyName = i18n("Generic Input Device"); - } - } - // Guess by driver - else if (!m_deviceDriver.isNull()) { - TQString friendlyDriverName = m_deviceDriver.lower(); - friendlyDriverName[0] = friendlyDriverName[0].upper(); - m_friendlyName = i18n("Generic %1 Device").arg(friendlyDriverName); - } - else if (m_systemPath.lower().startsWith("/sys/devices/virtual")) { - TQString friendlyDriverName = systemPath(); - friendlyDriverName.truncate(friendlyDriverName.length()-1); - friendlyDriverName.remove(0, friendlyDriverName.findRev("/")+1); - if (!friendlyDriverName.isNull()) { - m_friendlyName = i18n("Virtual Device %1").arg(friendlyDriverName); - } - else { - m_friendlyName = i18n("Unknown Virtual Device"); - } - } - else { - // I really have no idea what this peripheral is; say so! - m_friendlyName = i18n("Unknown Device") + " " + name(); - } - } - - return m_friendlyName; -} - -TDEStorageDevice::TDEStorageDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn), m_mediaInserted(true) { - m_diskType = TDEDiskDeviceType::Null; - m_diskStatus = TDEDiskDeviceStatus::Null; -} - -TDEStorageDevice::~TDEStorageDevice() { -} - -TDEDiskDeviceType::TDEDiskDeviceType TDEStorageDevice::diskType() { - return m_diskType; -} - -void TDEStorageDevice::internalSetDiskType(TDEDiskDeviceType::TDEDiskDeviceType dt) { - m_diskType = dt; -} - -bool TDEStorageDevice::isDiskOfType(TDEDiskDeviceType::TDEDiskDeviceType tf) { - return ((m_diskType&tf)!=TDEDiskDeviceType::Null); -} - -TDEDiskDeviceStatus::TDEDiskDeviceStatus TDEStorageDevice::diskStatus() { - return m_diskStatus; -} - -void TDEStorageDevice::internalSetDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus st) { - m_diskStatus = st; -} - -bool TDEStorageDevice::checkDiskStatus(TDEDiskDeviceStatus::TDEDiskDeviceStatus sf) { - return ((m_diskStatus&sf)!=(TDEDiskDeviceStatus::TDEDiskDeviceStatus)0); -} - -bool TDEStorageDevice::lockDriveMedia(bool lock) { - int fd = open(deviceNode().ascii(), O_RDWR | O_NONBLOCK); - if (fd < 0) { - return false; - } - if (ioctl(fd, CDROM_LOCKDOOR, (lock)?1:0) != 0) { - close(fd); - return false; - } - else { - close(fd); - return true; - } -} - -bool ejectDriveUDisks(TDEStorageDevice* sdevice) { -#ifdef WITH_UDISKS - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = sdevice->deviceNode(); - blockDeviceString.replace("/dev/", ""); - blockDeviceString = "/org/freedesktop/UDisks/devices/" + blockDeviceString; - - // Eject the drive! - TQT_DBusError error; - TQT_DBusProxy driveControl("org.freedesktop.UDisks", blockDeviceString, "org.freedesktop.UDisks.Device", dbusConn); - if (driveControl.canSend()) { - TQValueList<TQT_DBusData> params; - TQT_DBusDataList options; - params << TQT_DBusData::fromList(options); - TQT_DBusMessage reply = driveControl.sendWithReply("DriveEject", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout); - return FALSE; - } - else { - return TRUE; - } - } - else { - return FALSE; - } - } - else { - return FALSE; - } -#else // WITH_UDISKS - return FALSE; -#endif // WITH_UDISKS -} - -bool ejectDriveUDisks2(TDEStorageDevice* sdevice) { -#ifdef WITH_UDISKS2 - TQT_DBusConnection dbusConn = TQT_DBusConnection::addConnection(TQT_DBusConnection::SystemBus); - if (dbusConn.isConnected()) { - TQString blockDeviceString = sdevice->deviceNode(); - blockDeviceString.replace("/dev/", ""); - blockDeviceString = "/org/freedesktop/UDisks2/block_devices/" + blockDeviceString; - TQT_DBusProxy hardwareControl("org.freedesktop.UDisks2", blockDeviceString, "org.freedesktop.DBus.Properties", dbusConn); - if (hardwareControl.canSend()) { - // get associated udisks2 drive path - TQT_DBusError error; - TQValueList<TQT_DBusData> params; - params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Block") << TQT_DBusData::fromString("Drive"); - TQT_DBusMessage reply = hardwareControl.sendWithReply("Get", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout); - return FALSE; - } - else { - if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { - TQT_DBusObjectPath driveObjectPath = reply[0].toVariant().value.toObjectPath(); - if (!driveObjectPath.isValid()) { - return FALSE; - } - - error = TQT_DBusError(); - TQT_DBusProxy driveInformation("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.DBus.Properties", dbusConn); - // can eject? - TQValueList<TQT_DBusData> params; - params << TQT_DBusData::fromString("org.freedesktop.UDisks2.Drive") << TQT_DBusData::fromString("Ejectable"); - TQT_DBusMessage reply = driveInformation.sendWithReply("Get", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout); - return FALSE; - } - if (reply.type() == TQT_DBusMessage::ReplyMessage && reply.count() == 1) { - bool ejectable = reply[0].toVariant().value.toBool(); - if (!ejectable) { - return FALSE; - } - - // Eject the drive! - TQT_DBusProxy driveControl("org.freedesktop.UDisks2", driveObjectPath, "org.freedesktop.UDisks2.Drive", dbusConn); - TQValueList<TQT_DBusData> params; - TQT_DBusDataMap<TQString> options(TQT_DBusData::Variant); - params << TQT_DBusData::fromStringKeyMap(options); - TQT_DBusMessage reply = driveControl.sendWithReply("Eject", params, &error); - if (error.isValid()) { - // Error! - printf("[ERROR] %s\n", error.name().ascii()); fflush(stdout); - return FALSE; - } - else { - return TRUE; - } - } - else { - return FALSE; - } - } - else { - return FALSE; - } - } - } - else { - return FALSE; - } - } - else { - return FALSE; - } -#else // WITH_UDISKS2 - return FALSE; -#endif // WITH_UDISKS2 -} - -bool TDEStorageDevice::ejectDrive() { - if (ejectDriveUDisks2(this)) { - return TRUE; - } - else { -#ifdef WITH_UDISKS2 - printf("[tdehwlib] Failed to eject drive '%s' via udisks2, falling back to alternate mechanism\n", deviceNode().ascii()); -#endif // WITH_UDISKS2 - if (ejectDriveUDisks(this)) { - return TRUE; - } - else { -#ifdef WITH_UDISKS - printf("[tdehwlib] Failed to eject drive '%s' via udisks, falling back to alternate mechanism\n", deviceNode().ascii()); -#endif // WITH_UDISKS - TQString command = TQString("eject -v '%1' 2>&1").arg(deviceNode()); - - FILE *exepipe = popen(command.ascii(), "r"); - if (exepipe) { - TQString pmount_output; - char buffer[8092]; - pmount_output = fgets(buffer, sizeof(buffer), exepipe); - int retcode = pclose(exepipe); - if (retcode == 0) { - return TRUE; - } - else { - printf("[tdehwlib] Failed to eject drive '%s' via 'eject' command\n", deviceNode().ascii()); - return FALSE; - } - } - else { - printf("[tdehwlib] Failed to eject drive '%s' via 'eject' command\n", deviceNode().ascii()); - return FALSE; - } - } - } -} - -bool TDEStorageDevice::ejectDriveMedia() { - int fd = open(deviceNode().ascii(), O_RDWR | O_NONBLOCK); - if (fd < 0) { - return false; - } - if (ioctl(fd, CDROMEJECT) != 0) { - close(fd); - return false; - } - else { - close(fd); - return true; - } -} - -TQString TDEStorageDevice::diskLabel() { - return m_diskName; -} - -void TDEStorageDevice::internalSetDiskLabel(TQString dn) { - m_diskName = dn; -} - -bool TDEStorageDevice::mediaInserted() { - return m_mediaInserted; -} - -void TDEStorageDevice::internalSetMediaInserted(bool inserted) { - m_mediaInserted = inserted; -} - -TQString TDEStorageDevice::fileSystemName() { - return m_fileSystemName; -} - -void TDEStorageDevice::internalSetFileSystemName(TQString fn) { - m_fileSystemName = fn; -} - -TQString TDEStorageDevice::fileSystemUsage() { - return m_fileSystemUsage; -} - -void TDEStorageDevice::internalSetFileSystemUsage(TQString fu) { - m_fileSystemUsage = fu; -} - -TQString TDEStorageDevice::diskUUID() { - return m_diskUUID; -} - -void TDEStorageDevice::internalSetDiskUUID(TQString id) { - m_diskUUID = id; -} - -TQStringList TDEStorageDevice::holdingDevices() { - return m_holdingDevices; -} - -void TDEStorageDevice::internalSetHoldingDevices(TQStringList hd) { - m_holdingDevices = hd; -} - -TQStringList TDEStorageDevice::slaveDevices() { - return m_slaveDevices; -} - -void TDEStorageDevice::internalSetSlaveDevices(TQStringList sd) { - m_slaveDevices = sd; -} - -TQString TDEStorageDevice::friendlyName() { - // Return the actual storage device name - TQString devicevendorid = vendorEncoded(); - TQString devicemodelid = modelEncoded(); - - devicevendorid.replace("\\x20", " "); - devicemodelid.replace("\\x20", " "); - - devicevendorid = devicevendorid.stripWhiteSpace(); - devicemodelid = devicemodelid.stripWhiteSpace(); - devicevendorid = devicevendorid.simplifyWhiteSpace(); - devicemodelid = devicemodelid.simplifyWhiteSpace(); - - TQString devicename = devicevendorid + " " + devicemodelid; - - devicename = devicename.stripWhiteSpace(); - devicename = devicename.simplifyWhiteSpace(); - - if (devicename != "") { - return devicename; - } - - if (isDiskOfType(TDEDiskDeviceType::Camera)) { - return TDEGenericDevice::friendlyName(); - } - - if (isDiskOfType(TDEDiskDeviceType::Floppy)) { - return friendlyDeviceType(); - } - - TQString label = diskLabel(); - if (label.isNull()) { - if (deviceSize() > 0) { - if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { - label = i18n("%1 Removable Device").arg(deviceFriendlySize()); - } - else { - label = i18n("%1 Fixed Storage Device").arg(deviceFriendlySize()); - } - } - } - - if (!label.isNull()) { - return label; - } - - return friendlyDeviceType(); -} - -TQString TDEStorageDevice::friendlyDeviceType() { - TQString ret = i18n("Hard Disk Drive"); - - // Keep this in sync with TDEStorageDevice::icon(TDEIcon::StdSizes size) below - if (isDiskOfType(TDEDiskDeviceType::Floppy)) { - ret = i18n("Floppy Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::Optical)) { - ret = i18n("Optical Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::CDROM)) { - ret = i18n("CDROM Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::CDRW)) { - ret = i18n("CDRW Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::DVDROM)) { - ret = i18n("DVD Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::DVDRW)) { - ret = i18n("DVDRW Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::DVDRAM)) { - ret = i18n("DVDRAM Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::Zip)) { - ret = i18n("Zip Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::Tape)) { - ret = i18n("Tape Drive"); - } - if (isDiskOfType(TDEDiskDeviceType::Camera)) { - ret = i18n("Digital Camera"); - } - - if (isDiskOfType(TDEDiskDeviceType::HDD)) { - ret = i18n("Hard Disk Drive"); - if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { - ret = i18n("Removable Storage"); - } - if (isDiskOfType(TDEDiskDeviceType::CompactFlash)) { - ret = i18n("Compact Flash"); - } - if (isDiskOfType(TDEDiskDeviceType::MemoryStick)) { - ret = i18n("Memory Stick"); - } - if (isDiskOfType(TDEDiskDeviceType::SmartMedia)) { - ret = i18n("Smart Media"); - } - if (isDiskOfType(TDEDiskDeviceType::SDMMC)) { - ret = i18n("Secure Digital"); - } - } - - if (isDiskOfType(TDEDiskDeviceType::RAM)) { - ret = i18n("Random Access Memory"); - } - if (isDiskOfType(TDEDiskDeviceType::Loop)) { - ret = i18n("Loop Device"); - } - - return ret; -} - -TQPixmap TDEStorageDevice::icon(TDEIcon::StdSizes size) { - TQPixmap ret = DesktopIcon("hdd_unmount", size); - - if (isDiskOfType(TDEDiskDeviceType::Floppy)) { - ret = DesktopIcon("3floppy_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::Optical)) { - ret = DesktopIcon("cdrom_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::CDROM)) { - ret = DesktopIcon("cdrom_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::CDRW)) { - ret = DesktopIcon("cdwriter_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::DVDROM)) { - ret = DesktopIcon("dvd_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::DVDRW)) { - ret = DesktopIcon("dvd_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::DVDRAM)) { - ret = DesktopIcon("dvd_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::Zip)) { - ret = DesktopIcon("zip_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::Tape)) { - ret = DesktopIcon("tape_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::Camera)) { - ret = DesktopIcon("camera_unmount"); - } - - if (isDiskOfType(TDEDiskDeviceType::HDD)) { - ret = DesktopIcon("hdd_unmount", size); - if (checkDiskStatus(TDEDiskDeviceStatus::Hotpluggable)) { - ret = DesktopIcon("usbpendrive_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::CompactFlash)) { - ret = DesktopIcon("compact_flash_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::MemoryStick)) { - ret = DesktopIcon("memory_stick_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::SmartMedia)) { - ret = DesktopIcon("smart_media_unmount", size); - } - if (isDiskOfType(TDEDiskDeviceType::SDMMC)) { - ret = DesktopIcon("sd_mmc_unmount", size); - } - } - - if (isDiskOfType(TDEDiskDeviceType::RAM)) { - ret = DesktopIcon("memory", size); - } - if (isDiskOfType(TDEDiskDeviceType::Loop)) { - ret = DesktopIcon("blockdevice", size); - } - - return ret; -} - -unsigned long long TDEStorageDevice::deviceSize() { - TQString bsnodename = systemPath(); - bsnodename.append("/queue/physical_block_size"); - TQFile bsfile( bsnodename ); - TQString blocksize; - if ( bsfile.open( IO_ReadOnly ) ) { - TQTextStream stream( &bsfile ); - blocksize = stream.readLine(); - bsfile.close(); - } - else { - // Drat, I can't get a guaranteed block size. Assume a block size of 512, as everything I have read indicates that /sys/block/<dev>/size is given in terms of a 512 byte block... - blocksize = "512"; - } - - TQString dsnodename = systemPath(); - dsnodename.append("/size"); - TQFile dsfile( dsnodename ); - TQString devicesize; - if ( dsfile.open( IO_ReadOnly ) ) { - TQTextStream stream( &dsfile ); - devicesize = stream.readLine(); - dsfile.close(); - } - - return ((unsigned long long)blocksize.toULong()*(unsigned long long)devicesize.toULong()); -} - -TQString TDEStorageDevice::deviceFriendlySize() { - return TDEHardwareDevices::bytesToFriendlySizeString(deviceSize()); -} - -TQString TDEStorageDevice::mountPath() { - // See if this device node is mounted - // This requires parsing /proc/mounts, looking for deviceNode() - - // The Device Mapper throws a monkey wrench into this - // It likes to advertise mounts as /dev/mapper/<something>, - // where <something> is listed in <system path>/dm/name - - // First, ensure that all device information (mainly holders/slaves) is accurate - TDEGlobal::hardwareDevices()->rescanDeviceInformation(this); - - TQString dmnodename = systemPath(); - dmnodename.append("/dm/name"); - TQFile namefile( dmnodename ); - TQString dmaltname; - if ( namefile.open( IO_ReadOnly ) ) { - TQTextStream stream( &namefile ); - dmaltname = stream.readLine(); - namefile.close(); - } - if (!dmaltname.isNull()) { - dmaltname.prepend("/dev/mapper/"); - } - - TQStringList lines; - TQFile file( "/proc/mounts" ); - if ( file.open( IO_ReadOnly ) ) { - TQTextStream stream( &file ); - TQString line; - while ( !stream.atEnd() ) { - line = stream.readLine(); - TQStringList mountInfo = TQStringList::split(" ", line, true); - TQString testNode = *mountInfo.at(0); - // Check for match - if ((testNode == deviceNode()) || (testNode == dmaltname) || (testNode == ("/dev/disk/by-uuid/" + diskUUID()))) { - TQString ret = *mountInfo.at(1); - ret.replace("\\040", " "); - return ret; - } - lines += line; - } - file.close(); - } - - // While this device is not directly mounted, it could concievably be mounted via the Device Mapper - // If so, try to retrieve the mount path... - TQStringList slaveDeviceList = holdingDevices(); - for ( TQStringList::Iterator slavedevit = slaveDeviceList.begin(); slavedevit != slaveDeviceList.end(); ++slavedevit ) { - // Try to locate this device path in the TDE device tree - TDEHardwareDevices *hwdevices = TDEGlobal::hardwareDevices(); - TDEGenericDevice *hwdevice = hwdevices->findBySystemPath(*slavedevit); - if ((hwdevice) && (hwdevice->type() == TDEGenericDeviceType::Disk)) { - TDEStorageDevice* sdevice = static_cast<TDEStorageDevice*>(hwdevice); - return sdevice->mountPath(); - } - } - - return TQString::null; -} - -TQString TDEStorageDevice::mountDevice(TQString mediaName, TQString mountOptions, TQString* errRet, int* retcode) { - int internal_retcode; - if (!retcode) { - retcode = &internal_retcode; - } - - TQString ret = mountPath(); - - if (!ret.isNull()) { - return ret; - } - - // Create dummy password file - KTempFile passwordFile(TQString::null, "tmp", 0600); - passwordFile.setAutoDelete(true); - - TQString passFileName = passwordFile.name(); - TQString devNode = deviceNode(); - passFileName.replace("'", "'\\''"); - devNode.replace("'", "'\\''"); - mediaName.replace("'", "'\\''"); - TQString command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1").arg(passFileName).arg(mountOptions).arg(devNode).arg(mediaName); - - FILE *exepipe = popen(command.ascii(), "r"); - if (exepipe) { - TQString pmount_output; - char buffer[8092]; - pmount_output = fgets(buffer, sizeof(buffer), exepipe); - *retcode = pclose(exepipe); - if (errRet) { - *errRet = pmount_output; - } - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - - return ret; -} - -TQString TDEStorageDevice::mountEncryptedDevice(TQString passphrase, TQString mediaName, TQString mountOptions, TQString* errRet, int* retcode) { - int internal_retcode; - if (!retcode) { - retcode = &internal_retcode; - } - - TQString ret = mountPath(); - - if (!ret.isNull()) { - return ret; - } - - // Create dummy password file - KTempFile passwordFile(TQString::null, "tmp", 0600); - passwordFile.setAutoDelete(true); - TQFile* pwFile = passwordFile.file(); - if (!pwFile) { - return TQString::null; - } - - pwFile->writeBlock(passphrase.ascii(), passphrase.length()); - pwFile->flush(); - - TQString passFileName = passwordFile.name(); - TQString devNode = deviceNode(); - passFileName.replace("'", "'\\''"); - devNode.replace("'", "'\\''"); - mediaName.replace("'", "'\\''"); - TQString command = TQString("pmount -p '%1' %2 '%3' '%4' 2>&1").arg(passFileName).arg(mountOptions).arg(devNode).arg(mediaName); - - FILE *exepipe = popen(command.ascii(), "r"); - if (exepipe) { - TQString pmount_output; - char buffer[8092]; - pmount_output = fgets(buffer, sizeof(buffer), exepipe); - *retcode = pclose(exepipe); - if (errRet) { - *errRet = pmount_output; - } - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - ret = mountPath(); - - return ret; -} - -bool TDEStorageDevice::unmountDevice(TQString* errRet, int* retcode) { - int internal_retcode; - if (!retcode) { - retcode = &internal_retcode; - } - - TQString mountpoint = mountPath(); - - if (mountpoint.isNull()) { - return true; - } - - mountpoint.replace("'", "'\\''"); - TQString command = TQString("pumount '%1' 2>&1").arg(mountpoint); - FILE *exepipe = popen(command.ascii(), "r"); - if (exepipe) { - TQString pmount_output; - char buffer[8092]; - pmount_output = fgets(buffer, sizeof(buffer), exepipe); - *retcode = pclose(exepipe); - if (*retcode == 0) { - return true; - } - else { - if (errRet) { - *errRet = pmount_output; - } - } - } - - // Update internal mount data - TDEGlobal::hardwareDevices()->processModifiedMounts(); - - return false; -} - TDECPUDevice::TDECPUDevice(TDEGenericDeviceType::TDEGenericDeviceType dt, TQString dn) : TDEGenericDevice(dt, dn) { m_frequency = -1; m_minfrequency = -1; |