Use QNetworkAccessManager instead of KIO to download the config; remove KIO dep.

This commit is contained in:
shainer 2016-07-15 13:27:10 +01:00
parent 8798dc03ea
commit e462c3c8d8
3 changed files with 24 additions and 28 deletions

View File

@ -1,19 +1,5 @@
#include(KDEInstallDirs)
#include(KDECMakeSettings)
#include(KDECompilerSettings)
include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui )
list( APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules" )
find_package(ECM 1.0.0 REQUIRED NO_MODULE)
list( APPEND CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
set(KF5_MIN_VERSION "5.2.0")
find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
KIO # KIO
)
calamares_add_plugin( netinstall calamares_add_plugin( netinstall
TYPE viewmodule TYPE viewmodule
EXPORT_MACRO PLUGINDLLEXPORT_PRO EXPORT_MACRO PLUGINDLLEXPORT_PRO
@ -28,6 +14,5 @@ calamares_add_plugin( netinstall
netinstall.qrc netinstall.qrc
LINK_LIBRARIES LINK_LIBRARIES
calamaresui calamaresui
KF5::KIOCore
SHARED_LIB SHARED_LIB
) )

View File

@ -29,8 +29,9 @@
#include <QMap> #include <QMap>
#include <QTextStream> #include <QTextStream>
#include <KIO/Job> #include <QNetworkAccessManager>
#include <KIO/StoredTransferJob> #include <QNetworkRequest>
#include <QNetworkReply>
#include <QtDebug> #include <QtDebug>
#include <QtGlobal> #include <QtGlobal>
@ -44,6 +45,7 @@ using CalamaresUtils::yamlToVariant;
NetInstallPage::NetInstallPage( QWidget* parent ) NetInstallPage::NetInstallPage( QWidget* parent )
: QWidget( parent ) : QWidget( parent )
, ui( new Ui::Page_NetInst ) , ui( new Ui::Page_NetInst )
, m_networkManager( this )
{ {
ui->setupUi( this ); ui->setupUi( this );
} }
@ -88,18 +90,16 @@ void NetInstallPage::readGroups( const QByteArray& yamlData )
} }
void void
NetInstallPage::dataIsHere( KJob* job ) NetInstallPage::dataIsHere( QNetworkReply* reply )
{ {
if ( job->error() ) if ( reply->error() != QNetworkReply::NoError )
{ {
cDebug() << job->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)" ) );
return; return;
} }
auto transferJob = dynamic_cast<KIO::StoredTransferJob*>( job ); readGroups( reply->readAll() );
Q_ASSERT( transferJob != nullptr );
readGroups( transferJob->data() );
QSignalMapper* mapper = new QSignalMapper( this ); QSignalMapper* mapper = new QSignalMapper( this );
foreach ( const QString& groupKey, m_groupOrder ) foreach ( const QString& groupKey, m_groupOrder )
@ -120,7 +120,7 @@ NetInstallPage::dataIsHere( KJob* job )
static_cast<void(QSignalMapper::*)()>(&QSignalMapper::map) ); static_cast<void(QSignalMapper::*)()>(&QSignalMapper::map) );
} }
// TODO reply->deleteLater();
emit checkReady( isReady() ); emit checkReady( isReady() );
} }
@ -151,8 +151,14 @@ void NetInstallPage::loadGroupList()
Calamares::JobQueue::instance()->globalStorage()->value( Calamares::JobQueue::instance()->globalStorage()->value(
"groupsUrl" ).toString() ); "groupsUrl" ).toString() );
KIO::Job* getJob = KIO::storedGet( confUrl, KIO::Reload, KIO::Overwrite | KIO::HideProgressInfo ); QNetworkRequest request;
connect ( getJob, &KIO::Job::result, this, &NetInstallPage::dataIsHere ); request.setUrl( QUrl( confUrl ) );
// Follows all redirects except unsafe ones (https to http).
request.setAttribute(QNetworkRequest::FollowRedirectsAttribute, true);
connect(&m_networkManager, &QNetworkAccessManager::finished,
this, &NetInstallPage::dataIsHere);
m_networkManager.get(request);
} }
void NetInstallPage::onActivate() void NetInstallPage::onActivate()

View File

@ -22,10 +22,11 @@
#include "Typedefs.h" #include "Typedefs.h"
#include <QWidget> #include <QWidget>
#include <QAbstractButton> #include <QAbstractButton>
#include <QNetworkAccessManager>
// required forward declarations // required forward declarations
class KJob;
class QByteArray; class QByteArray;
class QNetworkReply;
class GroupSelectionWidget; class GroupSelectionWidget;
namespace Ui namespace Ui
@ -58,6 +59,7 @@ class NetInstallPage : public QWidget
public: public:
NetInstallPage( QWidget* parent = nullptr ); NetInstallPage( QWidget* parent = nullptr );
void onActivate(); void onActivate();
bool isReady(); bool isReady();
@ -73,7 +75,7 @@ public:
QStringList selectedPackages() const; QStringList selectedPackages() const;
public slots: public slots:
void dataIsHere( KJob* ); void dataIsHere( QNetworkReply* );
signals: signals:
void checkReady( bool ); void checkReady( bool );
@ -86,6 +88,9 @@ private:
Ui::Page_NetInst* ui; Ui::Page_NetInst* ui;
// Handles connection with the remote URL storing the configuration.
QNetworkAccessManager m_networkManager;
QHash<QString, Group> m_groups; QHash<QString, Group> m_groups;
// For each group name, store the selection widget to retrieve UI // For each group name, store the selection widget to retrieve UI
// properties. // properties.