Merge branch 'reduce-warnings' into calamares
This commit is contained in:
commit
fa29ae2c5e
@ -26,6 +26,11 @@ namespace CalamaresPython
|
|||||||
boost::python::object
|
boost::python::object
|
||||||
variantToPyObject( const QVariant& variant )
|
variantToPyObject( const QVariant& variant )
|
||||||
{
|
{
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wswitch-enum"
|
||||||
|
#endif
|
||||||
|
// 49 enumeration values not handled
|
||||||
switch ( variant.type() )
|
switch ( variant.type() )
|
||||||
{
|
{
|
||||||
case QVariant::Map:
|
case QVariant::Map:
|
||||||
@ -62,6 +67,9 @@ variantToPyObject( const QVariant& variant )
|
|||||||
default:
|
default:
|
||||||
return bp::object();
|
return bp::object();
|
||||||
}
|
}
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,6 +23,11 @@ static const char* s_preScript = nullptr;
|
|||||||
|
|
||||||
namespace bp = boost::python;
|
namespace bp = boost::python;
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wdisabled-macro-expansion"
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( mount_overloads, CalamaresPython::mount, 2, 4 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( mount_overloads, CalamaresPython::mount, 2, 4 );
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_str_overloads, CalamaresPython::target_env_call, 1, 3 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_str_overloads, CalamaresPython::target_env_call, 1, 3 );
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_list_overloads, CalamaresPython::target_env_call, 1, 3 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_call_list_overloads, CalamaresPython::target_env_call, 1, 3 );
|
||||||
@ -42,6 +47,10 @@ BOOST_PYTHON_FUNCTION_OVERLOADS( target_env_process_output_overloads,
|
|||||||
4 );
|
4 );
|
||||||
BOOST_PYTHON_FUNCTION_OVERLOADS( host_env_process_output_overloads, CalamaresPython::host_env_process_output, 1, 4 );
|
BOOST_PYTHON_FUNCTION_OVERLOADS( host_env_process_output_overloads, CalamaresPython::host_env_process_output, 1, 4 );
|
||||||
|
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
|
|
||||||
BOOST_PYTHON_MODULE( libcalamares )
|
BOOST_PYTHON_MODULE( libcalamares )
|
||||||
{
|
{
|
||||||
bp::object package = bp::scope();
|
bp::object package = bp::scope();
|
||||||
|
@ -22,6 +22,11 @@ namespace Partition
|
|||||||
QString
|
QString
|
||||||
prettyNameForFileSystemType( FileSystem::Type t )
|
prettyNameForFileSystemType( FileSystem::Type t )
|
||||||
{
|
{
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wswitch-enum"
|
||||||
|
#endif
|
||||||
|
// 13 enumeration values not handled
|
||||||
switch ( t )
|
switch ( t )
|
||||||
{
|
{
|
||||||
case FileSystem::Unknown:
|
case FileSystem::Unknown:
|
||||||
@ -60,11 +65,19 @@ prettyNameForFileSystemType( FileSystem::Type t )
|
|||||||
default:
|
default:
|
||||||
return FileSystem::nameForType( t );
|
return FileSystem::nameForType( t );
|
||||||
}
|
}
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
untranslatedFS( FileSystem::Type t )
|
untranslatedFS( FileSystem::Type t )
|
||||||
{
|
{
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic push
|
||||||
|
#pragma clang diagnostic ignored "-Wswitch-enum"
|
||||||
|
#endif
|
||||||
|
// 34 enumeration values not handled
|
||||||
switch ( t )
|
switch ( t )
|
||||||
{
|
{
|
||||||
case FileSystem::Type::ReiserFS:
|
case FileSystem::Type::ReiserFS:
|
||||||
@ -72,6 +85,9 @@ untranslatedFS( FileSystem::Type t )
|
|||||||
default:
|
default:
|
||||||
return FileSystem::nameForType( t, { QStringLiteral( "C" ) } );
|
return FileSystem::nameForType( t, { QStringLiteral( "C" ) } );
|
||||||
}
|
}
|
||||||
|
#ifdef __clang__
|
||||||
|
#pragma clang diagnostic pop
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Partition
|
} // namespace Partition
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include <KParts/ReadOnlyPart>
|
#include <KParts/ReadOnlyPart>
|
||||||
#include <KParts/kde_terminal_interface.h>
|
#include <KParts/kde_terminal_interface.h>
|
||||||
#include <KService>
|
#include <KService>
|
||||||
|
#include <kcoreaddons_version.h>
|
||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@ -42,7 +43,9 @@ void
|
|||||||
InteractiveTerminalPage::errorKonsoleNotInstalled()
|
InteractiveTerminalPage::errorKonsoleNotInstalled()
|
||||||
{
|
{
|
||||||
QMessageBox mb( QMessageBox::Critical,
|
QMessageBox mb( QMessageBox::Critical,
|
||||||
tr( "Konsole not installed" ), tr( "Please install KDE Konsole and try again!" ), QMessageBox::Ok );
|
tr( "Konsole not installed" ),
|
||||||
|
tr( "Please install KDE Konsole and try again!" ),
|
||||||
|
QMessageBox::Ok );
|
||||||
Calamares::fixButtonLabels( &mb );
|
Calamares::fixButtonLabels( &mb );
|
||||||
mb.exec();
|
mb.exec();
|
||||||
}
|
}
|
||||||
@ -54,20 +57,30 @@ InteractiveTerminalPage::onActivate()
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// For whatever reason, instead of simply linking against a library we
|
|
||||||
// need to do a runtime query to KService just to get a sodding terminal
|
#if KCOREADDONS_VERSION_MAJOR != 5
|
||||||
// widget.
|
#error Incompatible with not-KF5
|
||||||
|
#endif
|
||||||
|
#if KCOREADDONS_VERSION_MINOR >= 86
|
||||||
|
// 5.86 deprecated a bunch of KService and PluginFactory and related methods
|
||||||
|
auto md = KPluginMetaData::findPluginById( QString(), "konsolepart" );
|
||||||
|
if ( !md.isValid() )
|
||||||
|
{
|
||||||
|
errorKonsoleNotInstalled();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
auto* p = KPluginFactory::instantiatePlugin< KParts::ReadOnlyPart >( md, this ).plugin;
|
||||||
|
#else
|
||||||
KService::Ptr service = KService::serviceByDesktopName( "konsolepart" );
|
KService::Ptr service = KService::serviceByDesktopName( "konsolepart" );
|
||||||
if ( !service )
|
if ( !service )
|
||||||
{
|
{
|
||||||
// And all of this hoping the Konsole application is installed. If not,
|
|
||||||
// tough cookies.
|
|
||||||
errorKonsoleNotInstalled();
|
errorKonsoleNotInstalled();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create one instance of konsolepart.
|
// Create one instance of konsolepart.
|
||||||
KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} );
|
KParts::ReadOnlyPart* p = service->createInstance< KParts::ReadOnlyPart >( this, this, {} );
|
||||||
|
#endif
|
||||||
if ( !p )
|
if ( !p )
|
||||||
{
|
{
|
||||||
// One more opportunity for the loading operation to fail.
|
// One more opportunity for the loading operation to fail.
|
||||||
@ -91,7 +104,6 @@ InteractiveTerminalPage::onActivate()
|
|||||||
|
|
||||||
m_termHostWidget = p->widget();
|
m_termHostWidget = p->widget();
|
||||||
m_layout->addWidget( m_termHostWidget );
|
m_layout->addWidget( m_termHostWidget );
|
||||||
cDebug() << "Part widget ought to be" << m_termHostWidget->metaObject()->className();
|
|
||||||
|
|
||||||
t->showShellInDir( QDir::home().path() );
|
t->showShellInDir( QDir::home().path() );
|
||||||
t->sendInput( QString( "%1\n" ).arg( m_command ) );
|
t->sendInput( QString( "%1\n" ).arg( m_command ) );
|
||||||
|
@ -146,15 +146,12 @@ modeDescription( Config::InstallChoice choice )
|
|||||||
case Config::InstallChoice::Alongside:
|
case Config::InstallChoice::Alongside:
|
||||||
return QCoreApplication::translate( context, "Install %1 <strong>alongside</strong> another operating system." )
|
return QCoreApplication::translate( context, "Install %1 <strong>alongside</strong> another operating system." )
|
||||||
.arg( branding->shortVersionedName() );
|
.arg( branding->shortVersionedName() );
|
||||||
break;
|
|
||||||
case Config::InstallChoice::Erase:
|
case Config::InstallChoice::Erase:
|
||||||
return QCoreApplication::translate( context, "<strong>Erase</strong> disk and install %1." )
|
return QCoreApplication::translate( context, "<strong>Erase</strong> disk and install %1." )
|
||||||
.arg( branding->shortVersionedName() );
|
.arg( branding->shortVersionedName() );
|
||||||
break;
|
|
||||||
case Config::InstallChoice::Replace:
|
case Config::InstallChoice::Replace:
|
||||||
return QCoreApplication::translate( context, "<strong>Replace</strong> a partition with %1." )
|
return QCoreApplication::translate( context, "<strong>Replace</strong> a partition with %1." )
|
||||||
.arg( branding->shortVersionedName() );
|
.arg( branding->shortVersionedName() );
|
||||||
break;
|
|
||||||
case Config::InstallChoice::NoChoice:
|
case Config::InstallChoice::NoChoice:
|
||||||
case Config::InstallChoice::Manual:
|
case Config::InstallChoice::Manual:
|
||||||
return QCoreApplication::translate( context, "<strong>Manual</strong> partitioning." );
|
return QCoreApplication::translate( context, "<strong>Manual</strong> partitioning." );
|
||||||
@ -187,21 +184,18 @@ diskDescription( int listLength, const PartitionCoreModule::SummaryInfo& info, C
|
|||||||
.arg( branding->shortVersionedName() )
|
.arg( branding->shortVersionedName() )
|
||||||
.arg( info.deviceNode )
|
.arg( info.deviceNode )
|
||||||
.arg( info.deviceName );
|
.arg( info.deviceName );
|
||||||
break;
|
|
||||||
case Config::Erase:
|
case Config::Erase:
|
||||||
return QCoreApplication::translate( context,
|
return QCoreApplication::translate( context,
|
||||||
"<strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1." )
|
"<strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1." )
|
||||||
.arg( branding->shortVersionedName() )
|
.arg( branding->shortVersionedName() )
|
||||||
.arg( info.deviceNode )
|
.arg( info.deviceNode )
|
||||||
.arg( info.deviceName );
|
.arg( info.deviceName );
|
||||||
break;
|
|
||||||
case Config::Replace:
|
case Config::Replace:
|
||||||
return QCoreApplication::translate(
|
return QCoreApplication::translate(
|
||||||
context, "<strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1." )
|
context, "<strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1." )
|
||||||
.arg( branding->shortVersionedName() )
|
.arg( branding->shortVersionedName() )
|
||||||
.arg( info.deviceNode )
|
.arg( info.deviceNode )
|
||||||
.arg( info.deviceName );
|
.arg( info.deviceName );
|
||||||
break;
|
|
||||||
case Config::NoChoice:
|
case Config::NoChoice:
|
||||||
case Config::Manual:
|
case Config::Manual:
|
||||||
return QCoreApplication::translate(
|
return QCoreApplication::translate(
|
||||||
@ -558,7 +552,7 @@ PartitionViewStep::onLeave()
|
|||||||
if ( !okSize )
|
if ( !okSize )
|
||||||
{
|
{
|
||||||
cDebug() << o << "ESP too small";
|
cDebug() << o << "ESP too small";
|
||||||
const auto atLeastBytes = PartUtils::efiFilesystemMinimumSize();
|
const qint64 atLeastBytes = static_cast< qint64 >( PartUtils::efiFilesystemMinimumSize() );
|
||||||
const auto atLeastMiB = CalamaresUtils::BytesToMiB( atLeastBytes );
|
const auto atLeastMiB = CalamaresUtils::BytesToMiB( atLeastBytes );
|
||||||
description.append( ' ' );
|
description.append( ' ' );
|
||||||
description.append( tr( "The filesystem must be at least %1 MiB in size." ).arg( atLeastMiB ) );
|
description.append( tr( "The filesystem must be at least %1 MiB in size." ).arg( atLeastMiB ) );
|
||||||
|
@ -8,9 +8,10 @@
|
|||||||
* Calamares is Free Software: see the License-Identifier above.
|
* Calamares is Free Software: see the License-Identifier above.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include "core/DeviceModel.h"
|
#include "DeviceModel.h"
|
||||||
|
|
||||||
#include "core/PartitionModel.h"
|
#include "core/PartitionModel.h"
|
||||||
|
#include "core/SizeUtils.h"
|
||||||
|
|
||||||
#include "utils/CalamaresUtilsGui.h"
|
#include "utils/CalamaresUtilsGui.h"
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
@ -18,9 +19,6 @@
|
|||||||
// KPMcore
|
// KPMcore
|
||||||
#include <kpmcore/core/device.h>
|
#include <kpmcore/core/device.h>
|
||||||
|
|
||||||
// KF5
|
|
||||||
#include <KFormat>
|
|
||||||
|
|
||||||
#include <QIcon>
|
#include <QIcon>
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
|
|
||||||
@ -83,7 +81,7 @@ DeviceModel::data( const QModelIndex& index, int role ) const
|
|||||||
//: device[name] - size[number] (device-node[name])
|
//: device[name] - size[number] (device-node[name])
|
||||||
return tr( "%1 - %2 (%3)" )
|
return tr( "%1 - %2 (%3)" )
|
||||||
.arg( device->name() )
|
.arg( device->name() )
|
||||||
.arg( KFormat().formatByteSize( device->capacity() ) )
|
.arg( formatByteSize( device->capacity() ) )
|
||||||
.arg( device->deviceNode() );
|
.arg( device->deviceNode() );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -451,6 +451,8 @@ isEfiFilesystemSuitableType( const Partition* candidate )
|
|||||||
{
|
{
|
||||||
auto type = candidate->fileSystem().type();
|
auto type = candidate->fileSystem().type();
|
||||||
|
|
||||||
|
QT_WARNING_PUSH
|
||||||
|
QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" )
|
||||||
switch ( type )
|
switch ( type )
|
||||||
{
|
{
|
||||||
case FileSystem::Type::Fat32:
|
case FileSystem::Type::Fat32:
|
||||||
@ -465,6 +467,7 @@ isEfiFilesystemSuitableType( const Partition* candidate )
|
|||||||
cWarning() << "EFI boot partition must be FAT32";
|
cWarning() << "EFI boot partition must be FAT32";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
QT_WARNING_POP
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
@ -526,14 +529,15 @@ efiFilesystemMinimumSize()
|
|||||||
{
|
{
|
||||||
using CalamaresUtils::Units::operator""_MiB;
|
using CalamaresUtils::Units::operator""_MiB;
|
||||||
|
|
||||||
auto uefisys_part_sizeB = 300_MiB;
|
size_t uefisys_part_sizeB = 300_MiB;
|
||||||
|
|
||||||
// The default can be overridden; the key used here comes
|
// The default can be overridden; the key used here comes
|
||||||
// from the partition module Config.cpp
|
// from the partition module Config.cpp
|
||||||
auto* gs = Calamares::JobQueue::instance()->globalStorage();
|
auto* gs = Calamares::JobQueue::instance()->globalStorage();
|
||||||
if ( gs->contains( "efiSystemPartitionSize_i" ) )
|
if ( gs->contains( "efiSystemPartitionSize_i" ) )
|
||||||
{
|
{
|
||||||
uefisys_part_sizeB = gs->value( "efiSystemPartitionSize_i" ).toLongLong();
|
qint64 v = gs->value( "efiSystemPartitionSize_i" ).toLongLong();
|
||||||
|
uefisys_part_sizeB = v > 0 ? static_cast< size_t >( v ) : 0;
|
||||||
}
|
}
|
||||||
// There is a lower limit of what can be configured
|
// There is a lower limit of what can be configured
|
||||||
if ( uefisys_part_sizeB < 32_MiB )
|
if ( uefisys_part_sizeB < 32_MiB )
|
||||||
|
@ -71,15 +71,15 @@ swapSuggestion( const qint64 availableSpaceB, Config::SwapChoice swap )
|
|||||||
|
|
||||||
|
|
||||||
// Allow for a fudge factor
|
// Allow for a fudge factor
|
||||||
suggestedSwapSizeB *= overestimationFactor;
|
suggestedSwapSizeB = qRound( suggestedSwapSizeB * overestimationFactor );
|
||||||
|
|
||||||
// don't use more than 10% of available space
|
// don't use more than 10% of available space
|
||||||
if ( !ensureSuspendToDisk )
|
if ( !ensureSuspendToDisk )
|
||||||
{
|
{
|
||||||
suggestedSwapSizeB = qMin( suggestedSwapSizeB, qint64( 0.10 * availableSpaceB ) );
|
suggestedSwapSizeB = qMin( suggestedSwapSizeB, availableSpaceB / 10 /* 10% is 0.1 */ );
|
||||||
}
|
}
|
||||||
|
|
||||||
cDebug() << "Suggested swap size:" << suggestedSwapSizeB / 1024. / 1024. / 1024. << "GiB";
|
cDebug() << "Suggested swap size:" << CalamaresUtils::BytesToGiB( suggestedSwapSizeB ) << "GiB";
|
||||||
|
|
||||||
return suggestedSwapSizeB;
|
return suggestedSwapSizeB;
|
||||||
}
|
}
|
||||||
|
@ -141,6 +141,8 @@ void
|
|||||||
PartitionLayout::setDefaultFsType( FileSystem::Type defaultFsType )
|
PartitionLayout::setDefaultFsType( FileSystem::Type defaultFsType )
|
||||||
{
|
{
|
||||||
using FileSystem = FileSystem::Type;
|
using FileSystem = FileSystem::Type;
|
||||||
|
QT_WARNING_PUSH
|
||||||
|
QT_WARNING_DISABLE_CLANG( "-Wswitch-enum" )
|
||||||
switch ( defaultFsType )
|
switch ( defaultFsType )
|
||||||
{
|
{
|
||||||
case FileSystem::Unknown:
|
case FileSystem::Unknown:
|
||||||
@ -196,6 +198,7 @@ PartitionLayout::setDefaultFsType( FileSystem::Type defaultFsType )
|
|||||||
<< "Using ext4 instead.";
|
<< "Using ext4 instead.";
|
||||||
defaultFsType = FileSystem::Ext4;
|
defaultFsType = FileSystem::Ext4;
|
||||||
}
|
}
|
||||||
|
QT_WARNING_POP
|
||||||
|
|
||||||
m_defaultFsType = defaultFsType;
|
m_defaultFsType = defaultFsType;
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,12 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "core/PartitionModel.h"
|
#include "PartitionModel.h"
|
||||||
|
|
||||||
#include "core/ColorUtils.h"
|
#include "core/ColorUtils.h"
|
||||||
#include "core/KPMHelpers.h"
|
#include "core/KPMHelpers.h"
|
||||||
#include "core/PartitionInfo.h"
|
#include "core/PartitionInfo.h"
|
||||||
|
#include "core/SizeUtils.h"
|
||||||
|
|
||||||
#include "partition/FileSystem.h"
|
#include "partition/FileSystem.h"
|
||||||
#include "partition/PartitionQuery.h"
|
#include "partition/PartitionQuery.h"
|
||||||
@ -24,9 +25,6 @@
|
|||||||
#include <kpmcore/core/partitiontable.h>
|
#include <kpmcore/core/partitiontable.h>
|
||||||
#include <kpmcore/fs/filesystem.h>
|
#include <kpmcore/fs/filesystem.h>
|
||||||
|
|
||||||
// KF5
|
|
||||||
#include <KFormat>
|
|
||||||
|
|
||||||
// Qt
|
// Qt
|
||||||
#include <QColor>
|
#include <QColor>
|
||||||
|
|
||||||
@ -178,7 +176,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const
|
|||||||
if ( col == SizeColumn )
|
if ( col == SizeColumn )
|
||||||
{
|
{
|
||||||
qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize();
|
qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize();
|
||||||
return KFormat().formatByteSize( size );
|
return formatByteSize( size );
|
||||||
}
|
}
|
||||||
cDebug() << "Unknown column" << col;
|
cDebug() << "Unknown column" << col;
|
||||||
return QVariant();
|
return QVariant();
|
||||||
@ -210,7 +208,7 @@ PartitionModel::data( const QModelIndex& index, int role ) const
|
|||||||
QString prettyFileSystem
|
QString prettyFileSystem
|
||||||
= CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() );
|
= CalamaresUtils::Partition::prettyNameForFileSystemType( partition->fileSystem().type() );
|
||||||
qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize();
|
qint64 size = ( partition->lastSector() - partition->firstSector() + 1 ) * m_device->logicalSize();
|
||||||
QString prettySize = KFormat().formatByteSize( size );
|
QString prettySize = formatByteSize( size );
|
||||||
return QVariant( name + " " + prettyFileSystem + " " + prettySize );
|
return QVariant( name + " " + prettyFileSystem + " " + prettySize );
|
||||||
}
|
}
|
||||||
case SizeRole:
|
case SizeRole:
|
||||||
|
27
src/modules/partition/core/SizeUtils.h
Normal file
27
src/modules/partition/core/SizeUtils.h
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
/* === This file is part of Calamares - <https://calamares.io> ===
|
||||||
|
*
|
||||||
|
* SPDX-FileCopyrightText: 2021 Adriaan de Groot <groot@kde.org>
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*
|
||||||
|
* Calamares is Free Software: see the License-Identifier above.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PARTITION_CORE_SIZEUTILS_H
|
||||||
|
#define PARTITION_CORE_SIZEUTILS_H
|
||||||
|
|
||||||
|
#include <kpmcore/util/capacity.h>
|
||||||
|
|
||||||
|
/** @brief Helper function for printing sizes consistently.
|
||||||
|
*
|
||||||
|
* Most of Calamares uses a qint64 for partition sizes, so use that
|
||||||
|
* parameter type. However, the human-visible formatting doesn't need
|
||||||
|
* to bother with one-byte accuracy (and anyway, a double has at least 50 bits
|
||||||
|
* at which point we're printing giga (or gibi) bytes).
|
||||||
|
*/
|
||||||
|
static inline QString formatByteSize( qint64 sizeValue )
|
||||||
|
{
|
||||||
|
return Capacity::formatByteSize( static_cast< double >( sizeValue ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // PARTITION_CORE_SIZEUTILS_H
|
@ -68,7 +68,8 @@ DeviceInfoWidget::setPartitionTableType( PartitionTable::TableType type )
|
|||||||
void
|
void
|
||||||
DeviceInfoWidget::retranslateUi()
|
DeviceInfoWidget::retranslateUi()
|
||||||
{
|
{
|
||||||
QString typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper();
|
QString typeString;
|
||||||
|
QString toolTipString;
|
||||||
|
|
||||||
// fix up if the name shouldn't be uppercase:
|
// fix up if the name shouldn't be uppercase:
|
||||||
switch ( m_tableType )
|
switch ( m_tableType )
|
||||||
@ -76,38 +77,32 @@ DeviceInfoWidget::retranslateUi()
|
|||||||
case PartitionTable::msdos:
|
case PartitionTable::msdos:
|
||||||
case PartitionTable::msdos_sectorbased:
|
case PartitionTable::msdos_sectorbased:
|
||||||
typeString = "MBR";
|
typeString = "MBR";
|
||||||
|
toolTipString += tr( "<br><br>This partition table type is only advisable on older "
|
||||||
|
"systems which start from a <strong>BIOS</strong> boot "
|
||||||
|
"environment. GPT is recommended in most other cases.<br><br>"
|
||||||
|
"<strong>Warning:</strong> the MBR partition table "
|
||||||
|
"is an obsolete MS-DOS era standard.<br>"
|
||||||
|
"Only 4 <em>primary</em> partitions may be created, and of "
|
||||||
|
"those 4, one can be an <em>extended</em> partition, which "
|
||||||
|
"may in turn contain many <em>logical</em> partitions." );
|
||||||
|
break;
|
||||||
|
case PartitionTable::gpt:
|
||||||
|
// TypeString is ok
|
||||||
|
toolTipString += tr( "<br><br>This is the recommended partition table type for modern "
|
||||||
|
"systems which start from an <strong>EFI</strong> boot "
|
||||||
|
"environment." );
|
||||||
break;
|
break;
|
||||||
case PartitionTable::loop:
|
case PartitionTable::loop:
|
||||||
typeString = "loop";
|
typeString = "loop";
|
||||||
break;
|
|
||||||
case PartitionTable::mac:
|
|
||||||
typeString = "Mac";
|
|
||||||
break;
|
|
||||||
case PartitionTable::amiga:
|
|
||||||
typeString = "Amiga";
|
|
||||||
break;
|
|
||||||
case PartitionTable::sun:
|
|
||||||
typeString = "Sun";
|
|
||||||
break;
|
|
||||||
case PartitionTable::unknownTableType:
|
|
||||||
typeString = " ? ";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
QString toolTipString = tr( "This device has a <strong>%1</strong> partition "
|
|
||||||
"table." )
|
|
||||||
.arg( typeString );
|
|
||||||
|
|
||||||
switch ( m_tableType )
|
|
||||||
{
|
|
||||||
case PartitionTable::loop:
|
|
||||||
toolTipString = tr( "This is a <strong>loop</strong> "
|
toolTipString = tr( "This is a <strong>loop</strong> "
|
||||||
"device.<br><br>"
|
"device.<br><br>"
|
||||||
"It is a pseudo-device with no partition table "
|
"It is a pseudo-device with no partition table "
|
||||||
"that makes a file accessible as a block device. "
|
"that makes a file accessible as a block device. "
|
||||||
"This kind of setup usually only contains a single filesystem." );
|
"This kind of setup usually only contains a single filesystem." );
|
||||||
break;
|
break;
|
||||||
|
case PartitionTable::none:
|
||||||
case PartitionTable::unknownTableType:
|
case PartitionTable::unknownTableType:
|
||||||
|
typeString = " ? ";
|
||||||
toolTipString = tr( "This installer <strong>cannot detect a partition table</strong> on the "
|
toolTipString = tr( "This installer <strong>cannot detect a partition table</strong> on the "
|
||||||
"selected storage device.<br><br>"
|
"selected storage device.<br><br>"
|
||||||
"The device either has no partition "
|
"The device either has no partition "
|
||||||
@ -117,21 +112,35 @@ DeviceInfoWidget::retranslateUi()
|
|||||||
"either automatically, or through the manual partitioning "
|
"either automatically, or through the manual partitioning "
|
||||||
"page." );
|
"page." );
|
||||||
break;
|
break;
|
||||||
case PartitionTable::gpt:
|
// The next ones need to have the name adjusted, but the default tooltip is OK
|
||||||
toolTipString += tr( "<br><br>This is the recommended partition table type for modern "
|
case PartitionTable::mac:
|
||||||
"systems which start from an <strong>EFI</strong> boot "
|
typeString = "Mac";
|
||||||
"environment." );
|
|
||||||
break;
|
break;
|
||||||
case PartitionTable::msdos:
|
case PartitionTable::amiga:
|
||||||
case PartitionTable::msdos_sectorbased:
|
typeString = "Amiga";
|
||||||
toolTipString += tr( "<br><br>This partition table type is only advisable on older "
|
break;
|
||||||
"systems which start from a <strong>BIOS</strong> boot "
|
case PartitionTable::sun:
|
||||||
"environment. GPT is recommended in most other cases.<br><br>"
|
typeString = "Sun";
|
||||||
"<strong>Warning:</strong> the MBR partition table "
|
break;
|
||||||
"is an obsolete MS-DOS era standard.<br>"
|
// Peculiar tables, do nothing and use default type and tooltip strings
|
||||||
"Only 4 <em>primary</em> partitions may be created, and of "
|
case PartitionTable::aix:
|
||||||
"those 4, one can be an <em>extended</em> partition, which "
|
case PartitionTable::bsd:
|
||||||
"may in turn contain many <em>logical</em> partitions." );
|
case PartitionTable::dasd:
|
||||||
|
case PartitionTable::dvh:
|
||||||
|
case PartitionTable::pc98:
|
||||||
|
case PartitionTable::vmd:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( typeString.isEmpty() )
|
||||||
|
{
|
||||||
|
typeString = PartitionTable::tableTypeToName( m_tableType ).toUpper();
|
||||||
|
}
|
||||||
|
if ( toolTipString.isEmpty() )
|
||||||
|
{
|
||||||
|
toolTipString = tr( "This device has a <strong>%1</strong> partition "
|
||||||
|
"table." )
|
||||||
|
.arg( typeString );
|
||||||
}
|
}
|
||||||
|
|
||||||
m_ptLabel->setText( typeString );
|
m_ptLabel->setText( typeString );
|
||||||
|
@ -9,11 +9,10 @@
|
|||||||
|
|
||||||
#include "ListPhysicalVolumeWidgetItem.h"
|
#include "ListPhysicalVolumeWidgetItem.h"
|
||||||
|
|
||||||
#include <kpmcore/util/capacity.h>
|
#include "core/SizeUtils.h"
|
||||||
|
|
||||||
ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked )
|
ListPhysicalVolumeWidgetItem::ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked )
|
||||||
: QListWidgetItem(
|
: QListWidgetItem( QString( "%1 | %2" ).arg( partition->deviceNode(), formatByteSize( partition->capacity() ) ) )
|
||||||
QString( "%1 | %2" ).arg( partition->deviceNode(), Capacity::formatByteSize( partition->capacity() ) ) )
|
|
||||||
, m_partition( partition )
|
, m_partition( partition )
|
||||||
{
|
{
|
||||||
setToolTip( partition->deviceNode() );
|
setToolTip( partition->deviceNode() );
|
||||||
@ -26,3 +25,5 @@ ListPhysicalVolumeWidgetItem::partition() const
|
|||||||
{
|
{
|
||||||
return m_partition;
|
return m_partition;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ListPhysicalVolumeWidgetItem::~ListPhysicalVolumeWidgetItem() {}
|
||||||
|
@ -18,6 +18,7 @@ class ListPhysicalVolumeWidgetItem : public QListWidgetItem
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked );
|
ListPhysicalVolumeWidgetItem( const Partition* partition, bool checked );
|
||||||
|
~ListPhysicalVolumeWidgetItem() override;
|
||||||
|
|
||||||
const Partition* partition() const;
|
const Partition* partition() const;
|
||||||
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
#include "core/ColorUtils.h"
|
#include "core/ColorUtils.h"
|
||||||
#include "core/PartitionModel.h"
|
#include "core/PartitionModel.h"
|
||||||
|
#include "core/SizeUtils.h"
|
||||||
|
|
||||||
#include "utils/CalamaresUtilsGui.h"
|
#include "utils/CalamaresUtilsGui.h"
|
||||||
#include "utils/Logger.h"
|
#include "utils/Logger.h"
|
||||||
@ -20,8 +21,6 @@
|
|||||||
#include <kpmcore/core/device.h>
|
#include <kpmcore/core/device.h>
|
||||||
#include <kpmcore/fs/filesystem.h>
|
#include <kpmcore/fs/filesystem.h>
|
||||||
|
|
||||||
#include <KFormat>
|
|
||||||
|
|
||||||
// Qt
|
// Qt
|
||||||
#include <QGuiApplication>
|
#include <QGuiApplication>
|
||||||
#include <QMouseEvent>
|
#include <QMouseEvent>
|
||||||
@ -39,7 +38,7 @@ static QStringList
|
|||||||
buildUnknownDisklabelTexts( Device* dev )
|
buildUnknownDisklabelTexts( Device* dev )
|
||||||
{
|
{
|
||||||
QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ),
|
QStringList texts = { QObject::tr( "Unpartitioned space or unknown partition table" ),
|
||||||
KFormat().formatByteSize( dev->totalLogical() * dev->logicalSize() ) };
|
formatByteSize( dev->totalLogical() * dev->logicalSize() ) };
|
||||||
return texts;
|
return texts;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,7 +212,8 @@ ReplaceWidget::onPartitionSelected()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( partition->capacity() < requiredSpaceB )
|
// The loss of precision is ok; we're not going to fall over from a single byte
|
||||||
|
if ( static_cast< double >( partition->capacity() ) < requiredSpaceB )
|
||||||
{
|
{
|
||||||
updateStatus( CalamaresUtils::Fail,
|
updateStatus( CalamaresUtils::Fail,
|
||||||
tr( "<strong>%4</strong><br/><br/>"
|
tr( "<strong>%4</strong><br/><br/>"
|
||||||
|
@ -10,10 +10,9 @@
|
|||||||
#include "VolumeGroupBaseDialog.h"
|
#include "VolumeGroupBaseDialog.h"
|
||||||
#include "ui_VolumeGroupBaseDialog.h"
|
#include "ui_VolumeGroupBaseDialog.h"
|
||||||
|
|
||||||
|
#include "core/SizeUtils.h"
|
||||||
#include "gui/ListPhysicalVolumeWidgetItem.h"
|
#include "gui/ListPhysicalVolumeWidgetItem.h"
|
||||||
|
|
||||||
#include <kpmcore/util/capacity.h>
|
|
||||||
|
|
||||||
#include <QComboBox>
|
#include <QComboBox>
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QLabel>
|
#include <QLabel>
|
||||||
@ -100,7 +99,7 @@ VolumeGroupBaseDialog::setUsedSizeValue( qint64 usedSize )
|
|||||||
{
|
{
|
||||||
m_usedSizeValue = usedSize;
|
m_usedSizeValue = usedSize;
|
||||||
|
|
||||||
ui->usedSize->setText( Capacity::formatByteSize( m_usedSizeValue ) );
|
ui->usedSize->setText( formatByteSize( m_usedSizeValue ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -121,7 +120,7 @@ VolumeGroupBaseDialog::updateTotalSize()
|
|||||||
% ( ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) );
|
% ( ui->peSize->value() * Capacity::unitFactor( Capacity::Unit::Byte, Capacity::Unit::MiB ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
ui->totalSize->setText( Capacity::formatByteSize( m_totalSizeValue ) );
|
ui->totalSize->setText( formatByteSize( m_totalSizeValue ) );
|
||||||
|
|
||||||
updateTotalSectors();
|
updateTotalSectors();
|
||||||
}
|
}
|
||||||
|
@ -61,6 +61,7 @@ calamares_add_test(
|
|||||||
SOURCES
|
SOURCES
|
||||||
${PartitionModule_SOURCE_DIR}/jobs/AutoMountManagementJob.cpp
|
${PartitionModule_SOURCE_DIR}/jobs/AutoMountManagementJob.cpp
|
||||||
AutoMountTests.cpp
|
AutoMountTests.cpp
|
||||||
|
DEFINITIONS ${_partition_defs}
|
||||||
)
|
)
|
||||||
|
|
||||||
calamares_add_test(
|
calamares_add_test(
|
||||||
@ -70,4 +71,5 @@ calamares_add_test(
|
|||||||
${PartitionModule_SOURCE_DIR}/core/DeviceList.cpp
|
${PartitionModule_SOURCE_DIR}/core/DeviceList.cpp
|
||||||
LIBRARIES
|
LIBRARIES
|
||||||
kpmcore
|
kpmcore
|
||||||
|
DEFINITIONS ${_partition_defs}
|
||||||
)
|
)
|
||||||
|
@ -19,6 +19,8 @@
|
|||||||
|
|
||||||
#include <KMacroExpander>
|
#include <KMacroExpander>
|
||||||
|
|
||||||
|
#include <QCoreApplication>
|
||||||
|
|
||||||
#include <chrono>
|
#include <chrono>
|
||||||
|
|
||||||
|
|
||||||
@ -37,7 +39,6 @@ namespace
|
|||||||
*/
|
*/
|
||||||
class TrackingInstallJob : public Calamares::Job
|
class TrackingInstallJob : public Calamares::Job
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
TrackingInstallJob( const QString& url );
|
TrackingInstallJob( const QString& url );
|
||||||
~TrackingInstallJob() override;
|
~TrackingInstallJob() override;
|
||||||
@ -58,7 +59,6 @@ private:
|
|||||||
*/
|
*/
|
||||||
class TrackingMachineUpdateManagerJob : public Calamares::Job
|
class TrackingMachineUpdateManagerJob : public Calamares::Job
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
~TrackingMachineUpdateManagerJob() override;
|
~TrackingMachineUpdateManagerJob() override;
|
||||||
|
|
||||||
@ -75,7 +75,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
class TrackingKUserFeedbackJob : public Calamares::Job
|
class TrackingKUserFeedbackJob : public Calamares::Job
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
|
||||||
public:
|
public:
|
||||||
TrackingKUserFeedbackJob( const QString& username, const QStringList& areas );
|
TrackingKUserFeedbackJob( const QString& username, const QStringList& areas );
|
||||||
~TrackingKUserFeedbackJob() override;
|
~TrackingKUserFeedbackJob() override;
|
||||||
@ -99,13 +98,13 @@ TrackingInstallJob::~TrackingInstallJob() {}
|
|||||||
QString
|
QString
|
||||||
TrackingInstallJob::prettyName() const
|
TrackingInstallJob::prettyName() const
|
||||||
{
|
{
|
||||||
return tr( "Installation feedback" );
|
return QCoreApplication::translate( "TrackingInstallJob", "Installation feedback" );
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
TrackingInstallJob::prettyStatusMessage() const
|
TrackingInstallJob::prettyStatusMessage() const
|
||||||
{
|
{
|
||||||
return tr( "Sending installation feedback." );
|
return QCoreApplication::translate( "TrackingInstallJob", "Sending installation feedback." );
|
||||||
}
|
}
|
||||||
|
|
||||||
Calamares::JobResult
|
Calamares::JobResult
|
||||||
@ -122,8 +121,9 @@ TrackingInstallJob::exec()
|
|||||||
if ( result.status == RequestStatus::Timeout )
|
if ( result.status == RequestStatus::Timeout )
|
||||||
{
|
{
|
||||||
cWarning() << "install-tracking request timed out.";
|
cWarning() << "install-tracking request timed out.";
|
||||||
return Calamares::JobResult::error( tr( "Internal error in install-tracking." ),
|
return Calamares::JobResult::error(
|
||||||
tr( "HTTP request timed out." ) );
|
QCoreApplication::translate( "TrackingInstallJob", "Internal error in install-tracking." ),
|
||||||
|
QCoreApplication::translate( "TrackingInstallJob", "HTTP request timed out." ) );
|
||||||
}
|
}
|
||||||
return Calamares::JobResult::ok();
|
return Calamares::JobResult::ok();
|
||||||
}
|
}
|
||||||
@ -133,13 +133,13 @@ TrackingMachineUpdateManagerJob::~TrackingMachineUpdateManagerJob() {}
|
|||||||
QString
|
QString
|
||||||
TrackingMachineUpdateManagerJob::prettyName() const
|
TrackingMachineUpdateManagerJob::prettyName() const
|
||||||
{
|
{
|
||||||
return tr( "Machine feedback" );
|
return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Machine feedback" );
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
TrackingMachineUpdateManagerJob::prettyStatusMessage() const
|
TrackingMachineUpdateManagerJob::prettyStatusMessage() const
|
||||||
{
|
{
|
||||||
return tr( "Configuring machine feedback." );
|
return QCoreApplication::translate( "TrackingMachineUpdateManagerJob", "Configuring machine feedback." );
|
||||||
}
|
}
|
||||||
|
|
||||||
Calamares::JobResult
|
Calamares::JobResult
|
||||||
@ -162,14 +162,20 @@ TrackingMachineUpdateManagerJob::exec()
|
|||||||
else if ( r > 0 )
|
else if ( r > 0 )
|
||||||
{
|
{
|
||||||
return Calamares::JobResult::error(
|
return Calamares::JobResult::error(
|
||||||
tr( "Error in machine feedback configuration." ),
|
QCoreApplication::translate( "TrackingMachineUpdateManagerJob",
|
||||||
tr( "Could not configure machine feedback correctly, script error %1." ).arg( r ) );
|
"Error in machine feedback configuration." ),
|
||||||
|
QCoreApplication::translate( "TrackingMachineUpdateManagerJob",
|
||||||
|
"Could not configure machine feedback correctly, script error %1." )
|
||||||
|
.arg( r ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return Calamares::JobResult::error(
|
return Calamares::JobResult::error(
|
||||||
tr( "Error in machine feedback configuration." ),
|
QCoreApplication::translate( "TrackingMachineUpdateManagerJob",
|
||||||
tr( "Could not configure machine feedback correctly, Calamares error %1." ).arg( r ) );
|
"Error in machine feedback configuration." ),
|
||||||
|
QCoreApplication::translate( "TrackingMachineUpdateManagerJob",
|
||||||
|
"Could not configure machine feedback correctly, Calamares error %1." )
|
||||||
|
.arg( r ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -184,13 +190,13 @@ TrackingKUserFeedbackJob::~TrackingKUserFeedbackJob() {}
|
|||||||
QString
|
QString
|
||||||
TrackingKUserFeedbackJob::prettyName() const
|
TrackingKUserFeedbackJob::prettyName() const
|
||||||
{
|
{
|
||||||
return tr( "KDE user feedback" );
|
return QCoreApplication::translate( "TrackingKUserFeedbackJob", "KDE user feedback" );
|
||||||
}
|
}
|
||||||
|
|
||||||
QString
|
QString
|
||||||
TrackingKUserFeedbackJob::prettyStatusMessage() const
|
TrackingKUserFeedbackJob::prettyStatusMessage() const
|
||||||
{
|
{
|
||||||
return tr( "Configuring KDE user feedback." );
|
return QCoreApplication::translate( "TrackingKUserFeedbackJob", "Configuring KDE user feedback." );
|
||||||
}
|
}
|
||||||
|
|
||||||
Calamares::JobResult
|
Calamares::JobResult
|
||||||
@ -212,14 +218,18 @@ FeedbackLevel=16
|
|||||||
if ( r > 0 )
|
if ( r > 0 )
|
||||||
{
|
{
|
||||||
return Calamares::JobResult::error(
|
return Calamares::JobResult::error(
|
||||||
tr( "Error in KDE user feedback configuration." ),
|
QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ),
|
||||||
tr( "Could not configure KDE user feedback correctly, script error %1." ).arg( r ) );
|
QCoreApplication::translate( "TrackingKUserFeedbackJob",
|
||||||
|
"Could not configure KDE user feedback correctly, script error %1." )
|
||||||
|
.arg( r ) );
|
||||||
}
|
}
|
||||||
else if ( r < 0 )
|
else if ( r < 0 )
|
||||||
{
|
{
|
||||||
return Calamares::JobResult::error(
|
return Calamares::JobResult::error(
|
||||||
tr( "Error in KDE user feedback configuration." ),
|
QCoreApplication::translate( "TrackingKUserFeedbackJob", "Error in KDE user feedback configuration." ),
|
||||||
tr( "Could not configure KDE user feedback correctly, Calamares error %1." ).arg( r ) );
|
QCoreApplication::translate( "TrackingKUserFeedbackJob",
|
||||||
|
"Could not configure KDE user feedback correctly, Calamares error %1." )
|
||||||
|
.arg( r ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,7 +300,3 @@ addJob( Calamares::JobList& list, UserTrackingConfig* config )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "utils/moc-warnings.h"
|
|
||||||
|
|
||||||
#include "TrackingJobs.moc"
|
|
||||||
|
Loading…
Reference in New Issue
Block a user