diff --git a/src/modules/partition/CreatePartitionJob.cpp b/src/modules/partition/CreatePartitionJob.cpp index fab237376..633535b63 100644 --- a/src/modules/partition/CreatePartitionJob.cpp +++ b/src/modules/partition/CreatePartitionJob.cpp @@ -18,14 +18,22 @@ #include +#include + // CalaPM +#include +#include +#include +#include +#include #include #include #include #include +#include // Qt -#include +#include CreatePartitionJob::CreatePartitionJob( Device* device, Partition* partition ) : m_device( device ) @@ -42,7 +50,45 @@ CreatePartitionJob::prettyName() void CreatePartitionJob::exec() { - QThread::sleep(2); + Report report( 0 ); + + CoreBackend* backend = CoreBackendManager::self()->backend(); + QScopedPointer backendDevice( backend->openDevice( m_device->deviceNode() ) ); + Q_ASSERT( backendDevice.data() ); + + QScopedPointer backendPartitionTable( backendDevice->openPartitionTable() ); + Q_ASSERT( backendPartitionTable ); + + QString partitionPath = backendPartitionTable->createPartition( report, *m_partition ); + if ( partitionPath.isEmpty() ) + { + cLog( LOGINFO ) << "Failed to create partition"; + cLog( LOGINFO ) << report.toText(); + return; + } + backendPartitionTable->commit(); + + FileSystem& fs = m_partition->fileSystem(); + if ( fs.type() == FileSystem::Unformatted ) + { + return; + } + + if ( !fs.create( report, partitionPath ) ) + { + cLog( LOGINFO ) << "Failed to create filesystem"; + cLog( LOGINFO ) << report.toText(); + return; + } + + if ( !backendPartitionTable->setPartitionSystemType( report, *m_partition ) ) + { + cLog( LOGINFO ) << "Failed to update partition table"; + cLog( LOGINFO ) << report.toText(); + return; + } + + backendPartitionTable->commit(); } void