From a5a32a172296e6cf79ff43348bf4a90e5c16bb69 Mon Sep 17 00:00:00 2001 From: Klaus Basan Date: Wed, 27 Sep 2017 19:35:09 +0200 Subject: [PATCH] Ref T165, directly display distributions info * use digest signal to avoid unnecessary signals * better user experience by directly displaying info --- .../components/distributioninfocomponent.cpp | 26 +++++++++---------- .../components/distributioninfocomponent.h | 6 ++++- 2 files changed, 17 insertions(+), 15 deletions(-) diff --git a/src/blackgui/components/distributioninfocomponent.cpp b/src/blackgui/components/distributioninfocomponent.cpp index 2b6a753cf..90658a467 100644 --- a/src/blackgui/components/distributioninfocomponent.cpp +++ b/src/blackgui/components/distributioninfocomponent.cpp @@ -36,16 +36,14 @@ namespace BlackGui ui->lbl_NewVersionUrl->setOpenExternalLinks(true); // use version signal as trigger for completion - if (!m_distributionsInfo.get().isEmpty()) + const CDistributionList distributions = m_distributionsInfo.get(); + if (!distributions.isEmpty()) { // we have at least cached data: // in case CGuiApplication::distributionInfoAvailable never comes/was already sent - QTimer::singleShot(15 * 1000, this, [ = ] - { - // use this as timeout failover with cached data - if (m_distributionsLoaded) { return; } - this->ps_loadedDistributionInfo(true); - }); + // 1) we do not know if we missed the signal, the server is down etc + // 2) for better user experience we display straight away, it will overridden if the signal will br received + this->ps_loadedDistributionInfo(true); } Q_ASSERT_X(sGui, Q_FUNC_INFO, "Need sGui"); @@ -76,7 +74,6 @@ namespace BlackGui if (msgs.isSuccess()) { ui->le_LatestVersion->setText(""); - m_distributionsLoaded = false; // reset } } } @@ -85,20 +82,16 @@ namespace BlackGui { if (!success) { - m_distributionsLoaded = false; ui->pb_CheckForUpdates->setToolTip(""); CLogMessage(this).warning("Loading setup or distribution information failed"); return; } - // only emit once - if (m_distributionsLoaded) { return; } - m_distributionsLoaded = true; this->ps_channelChanged(); ui->pb_CheckForUpdates->setToolTip(sApp->getLastSuccesfulDistributionUrl()); - // emit only after all has been set - emit this->distributionInfoAvailable(success); + // emit via digest signal + m_dsDistributionAvailable.inputSignal(); } void CDistributionInfoComponent::ps_changedDistributionCache() @@ -128,6 +121,11 @@ namespace BlackGui } } + void CDistributionInfoComponent::triggerInfoAvailableSignal() + { + emit this->distributionInfoAvailable(true); + } + void CDistributionInfoComponent::ps_channelChanged() { const CDistributionList distributions(m_distributionsInfo.get()); diff --git a/src/blackgui/components/distributioninfocomponent.h b/src/blackgui/components/distributioninfocomponent.h index 6a62d0d6d..020d7f054 100644 --- a/src/blackgui/components/distributioninfocomponent.h +++ b/src/blackgui/components/distributioninfocomponent.h @@ -16,6 +16,7 @@ #include "blackgui/blackguiexport.h" #include "blackmisc/db/distributionlist.h" #include "blackmisc/settingscache.h" +#include "blackmisc/digestsignal.h" #include namespace Ui { class CDistributionInfoComponent; } @@ -77,15 +78,18 @@ namespace BlackGui private: QScopedPointer ui; QScopedPointer m_installXSwiftBusDialog; //!< dialog, install XSwiftXBus - bool m_distributionsLoaded = false; //!< distribution info loaded QString m_newVersionAvailable; //!< new version number if any BlackMisc::Db::CDistribution m_currentDistribution; //!< current distribution BlackMisc::CDataReadOnly m_distributionsInfo { this, &CDistributionInfoComponent::ps_changedDistributionCache }; //!< version cache BlackMisc::CSetting m_distributionSetting { this }; //!< channel/platform selected + BlackMisc::CDigestSignal m_dsDistributionAvailable { this, &CDistributionInfoComponent::triggerInfoAvailableSignal, 10000, 2 }; //! Save the current settings void saveSettings(); + //! Trigger the CDistributionInfoComponent::distributionInfoAvailable signal + void triggerInfoAvailableSignal(); + //! Selected platform from UI or guessed platform QString getSelectedOrGuessedPlatform() const; };