[netinstall] Improve 'next' button handling

- Document netinstall.conf a little,
 - Add setting *required* which influences whether next is enabled or not
   in case of missing or corrupt data,
 - Enable *next* button only once some (any!) data is received.

This can be used to disallow stepping past the netinstall step when
there is no data (e.g. internet has failed between the welcome page
and the netinstall page).
main
Adriaan de Groot 7 years ago
parent 35f5612ec1
commit ee0b3b85dc

@ -57,14 +57,6 @@ NetInstallPage::NetInstallPage( QWidget* parent )
ui->setupUi( this ); ui->setupUi( this );
} }
bool
NetInstallPage::isReady()
{
// nothing to wait for, the data are immediately ready
// if the user does not select any group nothing is installed
return true;
}
bool bool
NetInstallPage::readGroups( const QByteArray& yamlData ) NetInstallPage::readGroups( const QByteArray& yamlData )
{ {
@ -92,10 +84,13 @@ NetInstallPage::readGroups( const QByteArray& yamlData )
void void
NetInstallPage::dataIsHere( QNetworkReply* reply ) NetInstallPage::dataIsHere( QNetworkReply* reply )
{ {
// If m_required is *false* then we still say we're ready
// even if the reply is corrupt or missing.
if ( reply->error() != QNetworkReply::NoError ) if ( reply->error() != QNetworkReply::NoError )
{ {
cDebug() << reply->errorString(); cDebug() << reply->errorString();
ui->netinst_status->setText( tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ) ); ui->netinst_status->setText( tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ) );
emit checkReady( !m_required );
return; return;
} }
@ -104,6 +99,7 @@ NetInstallPage::dataIsHere( QNetworkReply* reply )
cDebug() << "Netinstall groups data was received, but invalid."; cDebug() << "Netinstall groups data was received, but invalid.";
ui->netinst_status->setText( tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ) ); ui->netinst_status->setText( tr( "Network Installation. (Disabled: Unable to fetch package lists, check your network connection)" ) );
reply->deleteLater(); reply->deleteLater();
emit checkReady( !m_required );
return; return;
} }
@ -112,7 +108,7 @@ NetInstallPage::dataIsHere( QNetworkReply* reply )
ui->groupswidget->header()->setSectionResizeMode( 1, QHeaderView::Stretch ); ui->groupswidget->header()->setSectionResizeMode( 1, QHeaderView::Stretch );
reply->deleteLater(); reply->deleteLater();
emit checkReady( isReady() ); emit checkReady( true );
} }
QList<PackageTreeItem::ItemData> NetInstallPage::selectedPackages() const QList<PackageTreeItem::ItemData> NetInstallPage::selectedPackages() const
@ -139,6 +135,12 @@ void NetInstallPage::loadGroupList()
m_networkManager.get( request ); m_networkManager.get( request );
} }
void NetInstallPage::setRequired(bool b)
{
m_required = b;
}
void NetInstallPage::onActivate() void NetInstallPage::onActivate()
{ {
ui->groupswidget->setFocus(); ui->groupswidget->setFocus();

@ -46,13 +46,17 @@ public:
void onActivate(); void onActivate();
bool isReady();
// Retrieves the groups, with name, description and packages, from // Retrieves the groups, with name, description and packages, from
// the remote URL configured in the settings. Assumes the URL is already // the remote URL configured in the settings. Assumes the URL is already
// in the global storage. This should be called before displaying the page. // in the global storage. This should be called before displaying the page.
void loadGroupList(); void loadGroupList();
// Sets the "required" state of netinstall data. Influences whether
// corrupt or unavailable data causes checkReady() to be emitted
// true (not-required) or false.
void setRequired( bool );
bool getRequired() const { return m_required; }
// Returns the list of packages belonging to groups that are // Returns the list of packages belonging to groups that are
// selected in the view in this given moment. No data is cached here, so // selected in the view in this given moment. No data is cached here, so
// this function does not have constant time. // this function does not have constant time.
@ -76,6 +80,7 @@ private:
QNetworkAccessManager m_networkManager; QNetworkAccessManager m_networkManager;
PackageModel* m_groups; PackageModel* m_groups;
bool m_required;
}; };
#endif // NETINSTALLPAGE_H #endif // NETINSTALLPAGE_H

@ -2,6 +2,7 @@
* Copyright 2016, Luca Giambonini <almack@chakraos.org> * Copyright 2016, Luca Giambonini <almack@chakraos.org>
* Copyright 2016, Lisa Vitolo <shainer@chakraos.org> * Copyright 2016, Lisa Vitolo <shainer@chakraos.org>
* Copyright 2017, Kyle Robbertze <krobbertze@gmail.com> * Copyright 2017, Kyle Robbertze <krobbertze@gmail.com>
* Copyright 2017, Adriaan de Groot <groot@kde.org>
* *
* Calamares is free software: you can redistribute it and/or modify * Calamares is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -30,11 +31,11 @@ CALAMARES_PLUGIN_FACTORY_DEFINITION( NetInstallViewStepFactory, registerPlugin<N
NetInstallViewStep::NetInstallViewStep( QObject* parent ) NetInstallViewStep::NetInstallViewStep( QObject* parent )
: Calamares::ViewStep( parent ) : Calamares::ViewStep( parent )
, m_widget( new NetInstallPage() ) , m_widget( new NetInstallPage() )
, m_nextEnabled( true ) , m_nextEnabled( false )
{ {
emit nextStatusChanged( true ); emit nextStatusChanged( true );
connect( m_widget, &NetInstallPage::checkReady, connect( m_widget, &NetInstallPage::checkReady,
this, &NetInstallViewStep::nextStatusChanged ); this, &NetInstallViewStep::nextIsReady );
} }
@ -178,6 +179,11 @@ NetInstallViewStep::onLeave()
void void
NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap ) NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap )
{ {
m_widget->setRequired(
configurationMap.contains( "required" ) &&
configurationMap.value( "required" ).type() == QVariant::Bool &&
configurationMap.value( "required" ).toBool() );
if ( configurationMap.contains( "groupsUrl" ) && if ( configurationMap.contains( "groupsUrl" ) &&
configurationMap.value( "groupsUrl" ).type() == QVariant::String ) configurationMap.value( "groupsUrl" ).type() == QVariant::String )
{ {
@ -186,3 +192,10 @@ NetInstallViewStep::setConfigurationMap( const QVariantMap& configurationMap )
m_widget->loadGroupList(); m_widget->loadGroupList();
} }
} }
void
NetInstallViewStep::nextIsReady( bool b )
{
m_nextEnabled = b;
emit nextStatusChanged( b );
}

@ -60,6 +60,9 @@ public:
void setConfigurationMap( const QVariantMap& configurationMap ) override; void setConfigurationMap( const QVariantMap& configurationMap ) override;
public slots:
void nextIsReady( bool );
private: private:
NetInstallPage* m_widget; NetInstallPage* m_widget;
bool m_nextEnabled; bool m_nextEnabled;

@ -1,2 +1,13 @@
--- ---
# This is the URL that is retrieved to get the netinstall groups-and-packages
# data (which should be in the format described in netinstall.yaml).
groupsUrl: http://chakraos.org/netinstall.php groupsUrl: http://chakraos.org/netinstall.php
# If the installation can proceed without netinstall (e.g. the Live CD
# can create a working installed system, but netinstall is preferred
# to bring it up-to-date or extend functionality) leave this set to
# false (the default). If set to true, the netinstall data is required.
#
# This only has an effect if the netinstall data cannot be retrieved,
# or is corrupt: having "required" set, means the install cannot proceed.
required: false

Loading…
Cancel
Save