calamares/src/modules/partition/core/KPMHelpers.cpp

198 lines
5.5 KiB
C++
Raw Normal View History

2014-06-30 15:03:29 +02:00
/* === This file is part of Calamares - <http://github.com/calamares> ===
*
* Copyright 2014, Aurélien Gâteau <agateau@kde.org>
* Copyright 2015-2016, Teo Mrnjavac <teo@kde.org>
2014-06-30 15:03:29 +02:00
*
* Calamares 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 3 of the License, or
* (at your option) any later version.
*
* Calamares 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 Calamares. If not, see <http://www.gnu.org/licenses/>.
*/
#include "core/KPMHelpers.h"
2014-06-30 15:03:29 +02:00
#include "core/PartitionInfo.h"
#include "core/PartitionIterator.h"
// KPMcore
#include <kpmcore/core/partition.h>
#include <kpmcore/fs/filesystemfactory.h>
2015-07-03 17:03:33 +02:00
#include <kpmcore/backend/corebackendmanager.h>
#include <QDebug>
2014-06-30 15:03:29 +02:00
namespace KPMHelpers
2014-06-30 15:03:29 +02:00
{
2015-07-03 17:03:33 +02:00
static bool s_KPMcoreInited = false;
bool
initKPMcore()
{
if ( s_KPMcoreInited )
return true;
QByteArray backendName = qgetenv( "KPMCORE_BACKEND" );
if ( backendName.isEmpty() )
2015-07-15 12:35:56 +02:00
backendName = "pmlibpartedbackendplugin";
2015-07-03 17:03:33 +02:00
if ( !CoreBackendManager::self()->load( backendName ) )
{
qWarning() << "Failed to load backend plugin" << backendName;
return false;
}
s_KPMcoreInited = true;
return true;
}
2014-09-25 16:49:13 +02:00
bool
isPartitionFreeSpace( Partition* partition )
2014-06-30 15:03:29 +02:00
{
2014-07-01 16:29:00 +02:00
return partition->roles().has( PartitionRole::Unallocated );
2014-06-30 15:03:29 +02:00
}
2014-09-25 16:49:13 +02:00
bool
isPartitionNew( Partition* partition )
2014-07-15 17:32:55 +02:00
{
return partition->state() == Partition::StateNew;
}
2014-09-25 16:49:13 +02:00
Partition*
findPartitionByMountPoint( const QList< Device* >& devices, const QString& mountPoint )
{
for ( auto device : devices )
for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it )
if ( PartitionInfo::mountPoint( *it ) == mountPoint )
return *it;
return nullptr;
}
2014-09-25 16:49:13 +02:00
Partition*
findPartitionByPath( const QList< Device* >& devices, const QString& path )
{
if ( path.simplified().isEmpty() )
return nullptr;
2014-09-25 16:49:13 +02:00
for ( auto device : devices )
for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it )
if ( ( *it )->partitionPath() == path.simplified() )
return *it;
return nullptr;
}
QList< Partition* >
findPartitions( const QList< Device* >& devices,
std::function< bool ( Partition* ) > criterionFunction )
{
QList< Partition* > results;
for ( auto device : devices )
for ( auto it = PartitionIterator::begin( device ); it != PartitionIterator::end( device ); ++it )
if ( criterionFunction( *it ) )
results.append( *it );
return results;
}
Partition*
createNewPartition( PartitionNode* parent,
const Device& device,
const PartitionRole& role,
FileSystem::Type fsType,
qint64 firstSector,
qint64 lastSector,
PartitionTable::Flags flags )
{
FileSystem* fs = FileSystemFactory::create( fsType, firstSector, lastSector );
return new Partition(
2014-08-05 09:54:30 +02:00
parent,
device,
role,
fs, fs->firstSector(), fs->lastSector(),
QString() /* path */,
PartitionTable::FlagNone /* availableFlags */,
QString() /* mountPoint */,
false /* mounted */,
flags /* activeFlags */,
2014-08-05 09:54:30 +02:00
Partition::StateNew
);
}
2014-09-25 16:49:13 +02:00
Partition*
clonePartition( Device* device, Partition* partition )
{
FileSystem* fs = FileSystemFactory::create(
partition->fileSystem().type(),
partition->firstSector(),
partition->lastSector()
);
return new Partition( partition->parent(),
*device,
partition->roles(),
fs,
fs->firstSector(),
fs->lastSector(),
partition->partitionPath(),
partition->activeFlags() );
}
QString
prettyNameForFileSystemType( FileSystem::Type t )
{
switch ( t )
{
case FileSystem::Unknown:
return QObject::tr( "unknown" );
case FileSystem::Extended:
return QObject::tr( "extended" );
case FileSystem::Unformatted:
return QObject::tr( "unformatted" );
case FileSystem::LinuxSwap:
return "swap";
case FileSystem::Fat16:
case FileSystem::Fat32:
case FileSystem::Ntfs:
case FileSystem::Xfs:
case FileSystem::Jfs:
case FileSystem::Hfs:
case FileSystem::Ufs:
case FileSystem::Hpfs:
case FileSystem::Luks:
case FileSystem::Ocfs2:
case FileSystem::Zfs:
case FileSystem::Nilfs2:
return FileSystem::nameForType( t ).toUpper();
case FileSystem::ReiserFS:
return "ReiserFS";
case FileSystem::Reiser4:
return "Reiser4";
case FileSystem::HfsPlus:
return "HFS+";
case FileSystem::Btrfs:
return "Btrfs";
case FileSystem::Exfat:
return "exFAT";
case FileSystem::Lvm2_PV:
return "LVM PV";
default:
return FileSystem::nameForType( t );
}
}
2014-06-30 15:03:29 +02:00
} // namespace