summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkh1 <karsten.heimrich@nokia.com>2011-11-28 17:09:11 +0100
committerKarsten Heimrich <karsten.heimrich@nokia.com>2011-11-28 19:47:41 +0100
commit4fcd529a845564be6a9d2b44f00b002f244f6bda (patch)
treeadcf1d54ddcd9fb594cbad0e975e1f153e25adae
parent03414189fdfb5b24d081c8bf0cb9fe5f5da731a3 (diff)
Remove fetch and implement "lazy" fetch.
Now it feels better then to bring up the dialog and start the fetch instantly, the user now has the opportunity to edit the network settings first and on "Next" we fetch the tree. Change-Id: I1ebce333bf5157421f2b62afbe5630b0ec1e0134 Reviewed-by: Tim Jenssen <tim.jenssen@nokia.com>
-rw-r--r--installerbuilder/installerbase/installerbasecommons.cpp128
-rw-r--r--installerbuilder/installerbase/installerbasecommons.h15
-rw-r--r--installerbuilder/installerbase/tabcontroller.cpp158
-rw-r--r--installerbuilder/installerbase/tabcontroller.h6
-rw-r--r--installerbuilder/libinstaller/packagemanagercore.cpp2
-rw-r--r--installerbuilder/libinstaller/packagemanagercore.h1
6 files changed, 141 insertions, 169 deletions
diff --git a/installerbuilder/installerbase/installerbasecommons.cpp b/installerbuilder/installerbase/installerbasecommons.cpp
index 726c632ee..dd09f8ad9 100644
--- a/installerbuilder/installerbase/installerbasecommons.cpp
+++ b/installerbuilder/installerbase/installerbasecommons.cpp
@@ -54,6 +54,8 @@ using namespace QInstaller;
IntroductionPageImpl::IntroductionPageImpl(QInstaller::PackageManagerCore *core)
: QInstaller::IntroductionPage(core)
+ , m_updatesFetched(false)
+ , m_allPackagesFetched(false)
{
QWidget *widget = new QWidget(this);
QVBoxLayout *layout = new QVBoxLayout(widget);
@@ -95,6 +97,9 @@ IntroductionPageImpl::IntroductionPageImpl(QInstaller::PackageManagerCore *core)
setWidget(widget);
core->setCompleteUninstallation(core->isUninstaller());
+
+ connect(core, SIGNAL(metaJobInfoMessage(QString)), this, SLOT(setMessage(QString)));
+ connect(core, SIGNAL(coreNetworkSettingsChanged()), this, SLOT(onCoreNetworkSettingsChanged()));
}
int IntroductionPageImpl::nextId() const
@@ -108,6 +113,79 @@ int IntroductionPageImpl::nextId() const
return QInstaller::IntroductionPage::nextId();
}
+bool IntroductionPageImpl::validatePage()
+{
+ PackageManagerCore *core = packageManagerCore();
+ if (core->isUninstaller())
+ return true;
+
+ setComplete(false);
+ gui()->setSettingsButtonEnabled(false);
+
+ const bool maintanence = core->isUpdater() || core->isPackageManager();
+ if (maintanence) {
+ showAll();
+ setMaintenanceToolsEnabled(false);
+ } else {
+ showMetaInfoUdate();
+ }
+
+ // fetch updater packages
+ if (core->isUpdater()) {
+ if (!m_updatesFetched) {
+ m_updatesFetched = core->fetchRemotePackagesTree();
+ if (!m_updatesFetched)
+ setErrorMessage(core->error());
+ }
+
+ callControlScript(QLatin1String("UpdaterSelectedCallback"));
+
+ if (m_updatesFetched) {
+ if (core->updaterComponents().count() <= 0)
+ setErrorMessage(tr("<b>No updates available.</b>"));
+ else
+ setComplete(true);
+ }
+ }
+
+ // fetch common packages
+ if (core->isInstaller() || core->isPackageManager()) {
+ bool localPackagesTreeFetched = false;
+ if (!m_allPackagesFetched) {
+ // first try to fetch the server side packages tree
+ m_allPackagesFetched = core->fetchRemotePackagesTree();
+ if (!m_allPackagesFetched) {
+ QString error = core->error();
+ if (core->isPackageManager()) {
+ // if that fails and we're in maintenance mode, try to fetch local installed tree
+ localPackagesTreeFetched = core->fetchLocalPackagesTree();
+ if (localPackagesTreeFetched) {
+ // if that succeeded, adjust error message
+ error = QLatin1String("<font color=\"red\">") + error + tr(" Only local package "
+ "management available.") + QLatin1String("</font>");
+ }
+ }
+ setErrorMessage(error);
+ }
+ }
+
+ callControlScript(QLatin1String("PackageManagerSelectedCallback"));
+
+ if (m_allPackagesFetched | localPackagesTreeFetched)
+ setComplete(true);
+ }
+
+ if (maintanence) {
+ showMaintenanceTools();
+ setMaintenanceToolsEnabled(true);
+ } else {
+ hideAll();
+ }
+ gui()->setSettingsButtonEnabled(true);
+
+ return isComplete();
+}
+
void IntroductionPageImpl::showAll()
{
showWidgets(true);
@@ -139,6 +217,8 @@ void IntroductionPageImpl::setMaintenanceToolsEnabled(bool enable)
m_removeAllComponents->setEnabled(enable);
}
+// -- public slots
+
void IntroductionPageImpl::setMessage(const QString &msg)
{
m_label->setText(msg);
@@ -158,30 +238,72 @@ void IntroductionPageImpl::setErrorMessage(const QString &error)
m_errorLabel->setPalette(palette);
}
+void IntroductionPageImpl::callControlScript(const QString &callback)
+{
+ // Initialize the gui. Needs to be done after check repositories as only then the ui can handle
+ // hide of pages depending on the components.
+ gui()->init();
+ gui()->callControlScriptMethod(callback);
+ gui()->triggerControlScriptForCurrentPage();
+}
+
+// -- private slots
+
void IntroductionPageImpl::setUpdater(bool value)
{
if (value) {
+ entering();
+ gui()->showSettingsButton(true);
packageManagerCore()->setUpdater();
- emit initUpdater();
}
}
void IntroductionPageImpl::setUninstaller(bool value)
{
if (value) {
+ entering();
+ gui()->showSettingsButton(false);
packageManagerCore()->setUninstaller();
- emit initUninstaller();
}
}
void IntroductionPageImpl::setPackageManager(bool value)
{
if (value) {
+ entering();
+ gui()->showSettingsButton(true);
packageManagerCore()->setPackageManager();
- emit initPackageManager();
}
}
+void IntroductionPageImpl::onCoreNetworkSettingsChanged()
+{
+ m_updatesFetched = false;
+ m_allPackagesFetched = false;
+}
+
+// -- private
+
+void IntroductionPageImpl::entering()
+{
+ setComplete(true);
+ showWidgets(false);
+ setMessage(QString());
+ setErrorMessage(QString());
+
+ PackageManagerCore *core = packageManagerCore();
+ if (core->isUninstaller() ||core->isUpdater() || core->isPackageManager()) {
+ showMaintenanceTools();
+ setMaintenanceToolsEnabled(true);
+ }
+}
+
+void IntroductionPageImpl::leaving()
+{
+ // TODO: force repaint on next page, keeps unpainted after fetch
+ QTimer::singleShot(100, gui()->page(nextId()), SLOT(repaint()));
+}
+
void IntroductionPageImpl::showWidgets(bool show)
{
m_label->setVisible(show);
diff --git a/installerbuilder/installerbase/installerbasecommons.h b/installerbuilder/installerbase/installerbasecommons.h
index 07b2431e9..7a0af8078 100644
--- a/installerbuilder/installerbase/installerbasecommons.h
+++ b/installerbuilder/installerbase/installerbasecommons.h
@@ -45,6 +45,7 @@ public:
explicit IntroductionPageImpl(QInstaller::PackageManagerCore *core);
int nextId() const;
+ bool validatePage();
void showAll();
void hideAll();
@@ -56,20 +57,24 @@ public Q_SLOTS:
void setMessage(const QString &msg);
void setErrorMessage(const QString &error);
-Q_SIGNALS:
- void initUpdater();
- void initUninstaller();
- void initPackageManager();
-
private Q_SLOTS:
void setUpdater(bool value);
void setUninstaller(bool value);
void setPackageManager(bool value);
+ void onCoreNetworkSettingsChanged();
private:
+ void entering();
+ void leaving();
+
void showWidgets(bool show);
+ void callControlScript(const QString &callback);
private:
+ bool m_updatesFetched;
+ bool m_updatesCompleted;
+ bool m_allPackagesFetched;
+
QLabel *m_label;
QLabel *m_errorLabel;
QProgressBar *m_progressBar;
diff --git a/installerbuilder/installerbase/tabcontroller.cpp b/installerbuilder/installerbase/tabcontroller.cpp
index 5201fa6f6..f0fd306cf 100644
--- a/installerbuilder/installerbase/tabcontroller.cpp
+++ b/installerbuilder/installerbase/tabcontroller.cpp
@@ -36,11 +36,9 @@
#include "settingsdialog.h"
#include <common/utils.h>
-#include <component.h>
#include <packagemanagercore.h>
#include <QtCore/QTimer>
-
#include <QtScript/QScriptEngine>
using namespace QInstaller;
@@ -55,25 +53,18 @@ public:
~Private();
bool m_init;
- bool m_updatesFetched;
- bool m_allPackagesFetched;
- bool m_introPageConnected;
-
- QInstaller::PackageManagerGui *m_gui;
- QInstaller::PackageManagerCore *m_core;
-
QString m_controlScript;
QHash<QString, QString> m_params;
Settings m_settings;
bool m_networkSettingsChanged;
+
+ QInstaller::PackageManagerGui *m_gui;
+ QInstaller::PackageManagerCore *m_core;
};
TabController::Private::Private()
: m_init(false)
- , m_updatesFetched(false)
- , m_allPackagesFetched(false)
- , m_introPageConnected(false)
, m_gui(0)
, m_core(0)
, m_networkSettingsChanged(false)
@@ -138,153 +129,17 @@ int TabController::init()
engine->newQObject(this));
}
- IntroductionPageImpl *introPage =
- qobject_cast<IntroductionPageImpl*>(d->m_gui->page(PackageManagerCore::Introduction));
- connect(introPage, SIGNAL(initUpdater()), this, SLOT(initUpdater()));
- connect(introPage, SIGNAL(initUninstaller()), this, SLOT(initUninstaller()));
- connect(introPage, SIGNAL(initPackageManager()), this, SLOT(initPackageManager()));
-
connect(d->m_gui, SIGNAL(currentIdChanged(int)), this, SLOT(onCurrentIdChanged(int)));
connect(d->m_gui, SIGNAL(settingsButtonClicked()), this, SLOT(onSettingsButtonClicked()));
}
- d->m_updatesFetched = false;
- d->m_allPackagesFetched = false;
-
- if (d->m_core->isUpdater())
- return initUpdater();
-
- if (d->m_core->isUninstaller())
- return initUninstaller();
-
- return initPackageManager();
-}
-
-int TabController::initUpdater()
-{
- onCurrentIdChanged(d->m_gui->currentId());
- IntroductionPageImpl *introPage = introductionPage();
-
- introPage->setMessage(QString());
- introPage->setErrorMessage(QString());
- introPage->showAll();
- introPage->setComplete(false);
- introPage->setMaintenanceToolsEnabled(false);
-
- if (!d->m_introPageConnected) {
- d->m_introPageConnected = true;
- connect(d->m_core, SIGNAL(metaJobInfoMessage(QString)), introPage, SLOT(setMessage(QString)));
- }
-
d->m_gui->setWindowModality(Qt::WindowModal);
- d->m_gui->init(); // Initialize/ reset the ui.
d->m_gui->show();
- d->m_gui->setSettingsButtonEnabled(false);
-
- if (!d->m_updatesFetched) {
- d->m_updatesFetched = d->m_core->fetchRemotePackagesTree();
- if (!d->m_updatesFetched)
- introPage->setErrorMessage(d->m_core->error());
- }
- // Needs to be done after check repositories as only then the ui can handle hide of pages depending on
- // the components.
- d->m_gui->callControlScriptMethod(QLatin1String("UpdaterSelectedCallback"));
- d->m_gui->triggerControlScriptForCurrentPage();
-
- introPage->showMaintenanceTools();
- introPage->setMaintenanceToolsEnabled(true);
-
- if (d->m_updatesFetched) {
- if (d->m_core->updaterComponents().count() <= 0)
- introPage->setErrorMessage(tr("<b>No updates available.</b>"));
- else
- introPage->setComplete(true);
- }
- d->m_gui->setSettingsButtonEnabled(true);
-
- return d->m_core->status();
-}
-
-int TabController::initUninstaller()
-{
onCurrentIdChanged(d->m_gui->currentId());
- IntroductionPageImpl *introPage = introductionPage();
-
- introPage->setMessage(QString());
- introPage->setErrorMessage(QString());
- introPage->setComplete(true);
- introPage->showMaintenanceTools();
-
- d->m_gui->setWindowModality(Qt::WindowModal);
- d->m_gui->show();
-
return PackageManagerCore::Success;
}
-int TabController::initPackageManager()
-{
- onCurrentIdChanged(d->m_gui->currentId());
- IntroductionPageImpl *introPage = introductionPage();
-
- introPage->setMessage(QString());
- introPage->setErrorMessage(QString());
- introPage->setComplete(false);
- introPage->showMetaInfoUdate();
-
- if (d->m_core->isPackageManager()) {
- introPage->showAll();
- introPage->setMaintenanceToolsEnabled(false);
- }
-
- if (!d->m_introPageConnected) {
- d->m_introPageConnected = true;
- connect(d->m_core, SIGNAL(metaJobInfoMessage(QString)), introPage, SLOT(setMessage(QString)));
- }
-
- d->m_gui->setWindowModality(Qt::WindowModal);
- d->m_gui->init(); // Initialize/ reset the ui.
- d->m_gui->show();
- d->m_gui->setSettingsButtonEnabled(false);
-
- bool localPackagesTreeFetched = false;
- if (!d->m_allPackagesFetched) {
- // first try to fetch the server side packages tree
- d->m_allPackagesFetched = d->m_core->fetchRemotePackagesTree();
- if (!d->m_allPackagesFetched) {
- QString error = d->m_core->error();
- if (d->m_core->isPackageManager()) {
- // if that fails and we're in maintenance mode, try to fetch local installed tree
- localPackagesTreeFetched = d->m_core->fetchLocalPackagesTree();
- if (localPackagesTreeFetched) {
- // if that succeeded, adjust error message
- error = QLatin1String("<font color=\"red\">") + error + tr(" Only local package "
- "management available.") + QLatin1String("</font>");
- }
- }
- introPage->setErrorMessage(error);
- }
- }
-
- // Needs to be done after check repositories as only then the ui can handle hide of pages depending on
- // the components.
- d->m_gui->callControlScriptMethod(QLatin1String("PackageManagerSelectedCallback"));
- d->m_gui->triggerControlScriptForCurrentPage();
-
- if (d->m_core->isPackageManager()) {
- introPage->showMaintenanceTools();
- introPage->setMaintenanceToolsEnabled(true);
- } else {
- introPage->hideAll();
- }
-
- if (d->m_allPackagesFetched | localPackagesTreeFetched)
- introPage->setComplete(true);
- d->m_gui->setSettingsButtonEnabled(true);
-
- return d->m_core->status();
-}
-
// -- private slots
void TabController::restartWizard()
@@ -335,10 +190,3 @@ void TabController::onNetworkSettingsChanged(const QInstaller::Settings &setting
d->m_settings = settings;
d->m_networkSettingsChanged = true;
}
-
-// -- private
-
-IntroductionPageImpl *TabController::introductionPage() const
-{
- return qobject_cast<IntroductionPageImpl*> (d->m_gui->page(PackageManagerCore::Introduction));
-}
diff --git a/installerbuilder/installerbase/tabcontroller.h b/installerbuilder/installerbase/tabcontroller.h
index 39353ccfc..742299fdf 100644
--- a/installerbuilder/installerbase/tabcontroller.h
+++ b/installerbuilder/installerbase/tabcontroller.h
@@ -54,9 +54,6 @@ public:
public Q_SLOTS:
int init();
- int initUpdater();
- int initUninstaller();
- int initPackageManager();
private Q_SLOTS:
void restartWizard();
@@ -65,9 +62,6 @@ private Q_SLOTS:
void onNetworkSettingsChanged(const QInstaller::Settings &settings);
private:
- IntroductionPageImpl *introductionPage() const;
-
-private:
class Private;
Private *const d;
};
diff --git a/installerbuilder/libinstaller/packagemanagercore.cpp b/installerbuilder/libinstaller/packagemanagercore.cpp
index fa65a44b8..14a29022c 100644
--- a/installerbuilder/libinstaller/packagemanagercore.cpp
+++ b/installerbuilder/libinstaller/packagemanagercore.cpp
@@ -616,6 +616,8 @@ void PackageManagerCore::networkSettingsChanged()
if (d->isUpdater() || d->isPackageManager())
d->writeMaintenanceConfigFiles();
KDUpdater::FileDownloaderFactory::instance().setProxyFactory(proxyFactory());
+
+ emit coreNetworkSettingsChanged();
}
KDUpdater::FileDownloaderProxyFactory *PackageManagerCore::proxyFactory() const
diff --git a/installerbuilder/libinstaller/packagemanagercore.h b/installerbuilder/libinstaller/packagemanagercore.h
index d9ae85076..014abf70e 100644
--- a/installerbuilder/libinstaller/packagemanagercore.h
+++ b/installerbuilder/libinstaller/packagemanagercore.h
@@ -258,6 +258,7 @@ Q_SIGNALS:
void wizardPageVisibilityChangeRequested(bool visible, int page);
void setAutomatedPageSwitchEnabled(bool request);
+ void coreNetworkSettingsChanged();
private:
struct Data {