void SolidDeviceJob::start() { Solid::Device device (m_dest); QString operation = operationName(); if (operation == QLatin1String("mount")) { if (device.is<Solid::StorageAccess>()) { Solid::StorageAccess *access = device.as<Solid::StorageAccess>(); if (access && !access->isAccessible()) { access->setup(); } } } else if (operation == QLatin1String("unmount")) { if (device.is<Solid::OpticalDisc>()) { Solid::OpticalDrive *drive = device.as<Solid::OpticalDrive>(); if (!drive) { drive = device.parent().as<Solid::OpticalDrive>(); } if (drive) { drive->eject(); } } else if (device.is<Solid::StorageAccess>()) { Solid::StorageAccess *access = device.as<Solid::StorageAccess>(); if (access && access->isAccessible()) { access->teardown(); } } } emitResult(); }
void MenuDiskItem::ejectButtonClicked() { mEjectButtonClicked = true; Solid::StorageAccess* di = mDevice.as<Solid::StorageAccess>(); if (di->isAccessible()) di->teardown(); else onUnmounted(Solid::NoError, QString(), mDevice.udi()); mPopup->hide(); }
void PlacesItemModel::requestTeardown(int index) { const PlacesItem* item = placesItem(index); if (item) { Solid::StorageAccess* access = item->device().as<Solid::StorageAccess>(); if (access) { connect(access, &Solid::StorageAccess::teardownDone, this, &PlacesItemModel::slotStorageTeardownDone); access->teardown(); } } }
void MenuDiskItem::ejectButtonClicked() { mEjectButtonClicked = true; Solid::StorageAccess* di = mDevice.as<Solid::StorageAccess>(); if (di->isAccessible()) { di->teardown(); } else { unmounted(Solid::NoError, QString(), mDevice.udi()); } qobject_cast<QWidget*>(parent())->hide(); }
bool K3b::unmount( K3b::Device::Device* dev ) { if( !dev ) return false; Solid::StorageAccess *sa = dev->solidStorage(); if ( sa && sa->teardown() ){ return true; } QString mntDev = dev->blockDeviceName(); // first try to unmount it the standard way if( KIO::NetAccess::synchronousRun( KIO::unmount( mntDev ), 0 ) ) return true; QString mntPath; if ( KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByDevice( dev->blockDeviceName() ) ) { mntPath = mp->mountPoint(); } if ( mntPath.isEmpty() ) { mntPath = dev->blockDeviceName(); } QString umountBin = K3b::findExe( "umount" ); if( !umountBin.isEmpty() ) { KProcess p; p << umountBin; p << "-l"; // lazy unmount p << mntPath; p.start(); if (p.waitForFinished(-1)) return true; } // now try pmount QString pumountBin = K3b::findExe( "pumount" ); if( !pumountBin.isEmpty() ) { KProcess p; p << pumountBin; p << "-l"; // lazy unmount p << mntPath; p.start(); return p.waitForFinished(-1); } else { return false; } }
void SolidHwTest::testSetupTeardown() { Solid::StorageAccess *access; { Solid::Device device("/org/kde/solid/fakehw/volume_part1_size_993284096"); access = device.as<Solid::StorageAccess>(); } QList<QVariant> args; QSignalSpy spy(access, SIGNAL(accessibilityChanged(bool,QString))); access->teardown(); QCOMPARE(spy.count(), 1); args = spy.takeFirst(); QCOMPARE(args.at(0).toBool(), false); access->setup(); QCOMPARE(spy.count(), 1); args = spy.takeFirst(); QCOMPARE(args.at(0).toBool(), true); }
void StorageDevice::unmount() { Solid::StorageAccess *access = m_device.as<Solid::StorageAccess>(); access->teardown(); }