move mount & unmount to Filesystem #1

Merged
andrius merged 1 commits from :master into master 2016-05-13 22:59:05 +01:00
7 changed files with 44 additions and 37 deletions

View File

@ -267,16 +267,15 @@ void Partition::checkChildrenMounted()
bool Partition::canMount() const
{
// cannot mount if already mounted
if (isMounted())
if (isMounted()) {
return false;
}
// if the file system says we can mount without mount points, that's fine
// (this is the case for swap only, actually)
if (fileSystem().canMount(deviceNode()))
if (fileSystem().canMount(deviceNode(), mountPoint())) {
return true;
}
// cannot mount if we have no mount points
return !mountPoint().isEmpty();
return false;
}
/** @return true if this Partition can be unmounted */
@ -295,12 +294,8 @@ bool Partition::mount(Report& report)
bool success = false;
if (fileSystem().canMount(deviceNode()))
success = fileSystem().mount(deviceNode(), mountPoint());
else {
ExternalCommand mountCmd(report, QStringLiteral("mount"), QStringList() << QStringLiteral("-v") << deviceNode() << mountPoint());
if (mountCmd.run() && mountCmd.exitCode() == 0)
success = true;
if (fileSystem().canMount(deviceNode(), mountPoint())) {
success = fileSystem().mount(report, deviceNode(), mountPoint());
}
setMounted(success);

View File

@ -393,16 +393,27 @@ void FileSystem::move(qint64 newStartSector)
setFirstSector(newStartSector);
setLastSector(newStartSector + savedLength - 1);
}
bool FileSystem::canMount(const QString& deviceNode, const QString& mountPoint) const
{
Q_UNUSED(deviceNode);
// cannot mount if we have no mount points
return !mountPoint.isEmpty();
}
/** Attempt to mount this FileSystem on a given mount point
@param mountPoint the mount point to mount the FileSystem on
@return true on success
*/
bool FileSystem::mount(const QString &deviceNode, const QString &mountPoint)
bool FileSystem::mount(Report& report, const QString &deviceNode, const QString &mountPoint)
{
Q_UNUSED(deviceNode);
Q_UNUSED(mountPoint);
ExternalCommand mountCmd( report,
QStringLiteral("mount"),
{ QStringLiteral("--verbose"),
deviceNode,
mountPoint });
if (mountCmd.run() && mountCmd.exitCode() == 0) {
return true;
}
return false;
}

View File

@ -175,9 +175,8 @@ public:
static FileSystem::Type typeForName(const QString& s);
static FileSystem::Type detectFileSystem(const QString& partitionPath);
virtual bool canMount(const QString&) const {
return false; /**< @return true if this FileSystem can be mounted */
}
/**< @return true if this FileSystem can be mounted */
virtual bool canMount(const QString& deviceNode, const QString& mountPoint) const;
virtual bool canUnmount(const QString&) const {
return true; /**< @return true if this FileSystem can be unmounted */
}
@ -185,7 +184,7 @@ public:
virtual QString mountTitle() const;
virtual QString unmountTitle() const;
virtual bool mount(const QString& deviceNode, const QString& mountPoint);
virtual bool mount(Report& report, const QString& deviceNode, const QString& mountPoint);
virtual bool unmount(Report& report, const QString& deviceNode);
qint64 firstSector() const {

View File

@ -132,10 +132,17 @@ QString linuxswap::unmountTitle() const
return i18nc("@title:menu", "Deactivate swap");
}
bool linuxswap::mount(const QString& deviceNode, const QString& mountPoint)
bool linuxswap::canMount(const QString& deviceNode, const QString& mountPoint) const {
Q_UNUSED(deviceNode);
Q_UNUSED(mountPoint);
// linux swap doesn't require mount point to activate
return true;
}
bool linuxswap::mount(Report& report, const QString& deviceNode, const QString& mountPoint)
{
Q_UNUSED(mountPoint);
ExternalCommand cmd(QStringLiteral("swapon"), { deviceNode });
ExternalCommand cmd(report, QStringLiteral("swapon"), { deviceNode });
return cmd.run(-1) && cmd.exitCode() == 0;
}

View File

@ -48,14 +48,8 @@ public:
virtual bool copy(Report& report, const QString& targetDeviceNode, const QString& sourceDeviceNode) const override;
virtual bool updateUUID(Report& report, const QString& deviceNode) const override;
virtual bool canMount(const QString&) const override {
return true;
}
virtual bool canUnmount(const QString&) const override {
return true;
}
virtual bool mount(const QString& deviceNode, const QString& mountPoint) override;
virtual bool canMount(const QString& deviceNode, const QString& mountPoint) const override;
virtual bool mount(Report& report, const QString& deviceNode, const QString& mountPoint) override;
virtual bool unmount(Report& report, const QString& deviceNode) override;
virtual QString mountTitle() const override;

View File

@ -176,12 +176,12 @@ QString luks::passphrase() const
return m_passphrase;
}
bool luks::canMount(const QString& deviceNode) const
bool luks::canMount(const QString& deviceNode, const QString& mountPoint) const
{
return m_isCryptOpen &&
!m_isMounted &&
m_innerFs &&
m_innerFs->canMount(mapperName(deviceNode));
m_innerFs->canMount(mapperName(deviceNode), mountPoint);
}
bool luks::canUnmount(const QString& deviceNode) const
@ -360,7 +360,7 @@ qint64 luks::readUsedCapacity(const QString& deviceNode) const
return -1;
}
bool luks::mount(const QString& deviceNode, const QString& mountPoint)
bool luks::mount(Report& report, const QString& deviceNode, const QString& mountPoint)
{
if (!m_isCryptOpen)
{
@ -382,9 +382,9 @@ bool luks::mount(const QString& deviceNode, const QString& mountPoint)
if (mapperNode.isEmpty())
return false;
if (m_innerFs->canMount(mapperNode))
if (m_innerFs->canMount(mapperNode, mountPoint))
{
if (m_innerFs->mount(mapperNode, mountPoint))
if (m_innerFs->mount(report, mapperNode, mountPoint))
{
m_isMounted = true;
return true;
@ -392,6 +392,7 @@ bool luks::mount(const QString& deviceNode, const QString& mountPoint)
}
else {
ExternalCommand mountCmd(
report,
QStringLiteral("mount"),
{ QStringLiteral("-v"), mapperNode, mountPoint });
if (mountCmd.run() && mountCmd.exitCode() == 0)

View File

@ -118,7 +118,7 @@ public:
void setPassphrase(const QString&);
QString passphrase() const;
virtual bool canMount(const QString&) const override;
virtual bool canMount(const QString&, const QString&) const override;
virtual bool canUnmount(const QString&) const override;
bool isMounted() const;
void setMounted(bool mounted);
@ -134,7 +134,7 @@ public:
void loadInnerFileSystem(const QString& mapperNode);
void createInnerFileSystem(Type type);
virtual bool mount(const QString& deviceNode, const QString& mountPoint) override;
virtual bool mount(Report& report, const QString& deviceNode, const QString& mountPoint) override;
virtual bool unmount(Report& report, const QString& deviceNode) override;
virtual FileSystem::Type type() const override;